1 00:00:00,000 --> 00:00:01,940 2 00:00:01,940 --> 00:00:04,370 The following content is provided under a Creative 3 00:00:04,370 --> 00:00:05,780 Commons license. 4 00:00:05,780 --> 00:00:08,820 Your support will help MIT OpenCourseWare continue to 5 00:00:08,820 --> 00:00:12,470 offer high quality educational resources for free. 6 00:00:12,470 --> 00:00:15,370 To make a donation or view additional materials from 7 00:00:15,370 --> 00:00:19,300 hundreds of MIT courses, visit MIT OpenCourseWare at 8 00:00:19,300 --> 00:00:20,550 ocw.mit.edu. 9 00:00:20,550 --> 00:00:25,898 10 00:00:25,898 --> 00:00:27,148 PROFESSOR: Welcome, everybody. 11 00:00:27,148 --> 00:00:30,870 12 00:00:30,870 --> 00:00:36,095 So this is the one group meeting that we'll have with 13 00:00:36,095 --> 00:00:36,860 all you folks. 14 00:00:36,860 --> 00:00:41,020 We really appreciate your willingness to come and help 15 00:00:41,020 --> 00:00:45,460 us teach 6-172. 16 00:00:45,460 --> 00:00:50,950 Saman will explain what the course is all about, and then 17 00:00:50,950 --> 00:00:55,110 I will give a presentation, a little bit, of what your 18 00:00:55,110 --> 00:01:00,160 expected responsibilities are, and then Eric, who is one of 19 00:01:00,160 --> 00:01:06,960 our TAs, will present what the first project that they've 20 00:01:06,960 --> 00:01:08,430 been working on is all about. 21 00:01:08,430 --> 00:01:13,630 22 00:01:13,630 --> 00:01:19,930 We think we have a pretty good acronym, OK, MIT POSSE. 23 00:01:19,930 --> 00:01:25,050 Masters in the Practice of Software Systems Engineering, 24 00:01:25,050 --> 00:01:28,540 OK, and it is very much like a posse, in that we're trying to 25 00:01:28,540 --> 00:01:33,160 sort of deputizing you folks to help us deal with this mass 26 00:01:33,160 --> 00:01:34,550 of students that we deal with. 27 00:01:34,550 --> 00:01:37,130 There's no way, given the resources that we have 28 00:01:37,130 --> 00:01:41,270 available at MIT, that we could possibly give the 29 00:01:41,270 --> 00:01:45,800 attention to each of the students examples of code, and 30 00:01:45,800 --> 00:01:49,790 so our strategy is to go out and deputize some people to 31 00:01:49,790 --> 00:01:51,500 help us teach. 32 00:01:51,500 --> 00:01:55,410 As we'll discuss your responsibility is not to do 33 00:01:55,410 --> 00:01:59,780 any grading, OK, or even any understanding of the course 34 00:01:59,780 --> 00:02:01,560 content, OK? 35 00:02:01,560 --> 00:02:08,460 But rather to ask good questions of the students so 36 00:02:08,460 --> 00:02:13,330 that they understand what it's like to do software 37 00:02:13,330 --> 00:02:16,400 development, and you'll see that most of the students are 38 00:02:16,400 --> 00:02:20,930 very immature when it comes to coding practices. 39 00:02:20,930 --> 00:02:25,980 They have taken a minimum of one systems course before 40 00:02:25,980 --> 00:02:26,830 this, basically. 41 00:02:26,830 --> 00:02:29,250 SAMAN AMARASINGHE: Probably two classes where they write 42 00:02:29,250 --> 00:02:29,970 very small programs-- 43 00:02:29,970 --> 00:02:31,660 PROFESSOR: Where they write a very small programs, so they 44 00:02:31,660 --> 00:02:34,560 have no sort of sense of writing scale. 45 00:02:34,560 --> 00:02:37,680 Moreover the class that we're teaching because it's on the 46 00:02:37,680 --> 00:02:42,920 topic of performance engineering, they are inclined 47 00:02:42,920 --> 00:02:45,540 to break all the rules in order to get the best 48 00:02:45,540 --> 00:02:47,570 performance. 49 00:02:47,570 --> 00:02:50,680 And that's part of our game but of course what we want is, 50 00:02:50,680 --> 00:02:53,653 we want the countervailing-- 51 00:02:53,653 --> 00:02:56,300 52 00:02:56,300 --> 00:02:59,080 you still have to make things maintainable, you really 53 00:02:59,080 --> 00:03:02,990 should do it this way, yeah it's fine to violate some 54 00:03:02,990 --> 00:03:05,470 abstractions here and there, but then you should document 55 00:03:05,470 --> 00:03:07,970 that you're violating those abstractions and so forth. 56 00:03:07,970 --> 00:03:12,120 And that's what we're counting on you for, is to insert some 57 00:03:12,120 --> 00:03:14,350 experience and common sense. 58 00:03:14,350 --> 00:03:15,950 So, Saman, take it away. 59 00:03:15,950 --> 00:03:18,760 SAMAN AMARASINGHE: OK, good, so to add to what Charles 60 00:03:18,760 --> 00:03:23,160 said, when I was an undergrad, when I took something like a 61 00:03:23,160 --> 00:03:28,150 science class, or a physics class, or engineering class, 62 00:03:28,150 --> 00:03:30,540 most of the problems had kind of right answer and a wrong 63 00:03:30,540 --> 00:03:33,400 answer and then it's very easy to grade those things. 64 00:03:33,400 --> 00:03:38,350 But when I took something like an English class, all the 65 00:03:38,350 --> 00:03:41,530 papers I wrote, somebody really went through carefully 66 00:03:41,530 --> 00:03:45,250 and graded it and gave me lot of insightful comments so I 67 00:03:45,250 --> 00:03:49,590 can kind of develop my own style of writing. 68 00:03:49,590 --> 00:03:54,330 And what happens in software is the programming there's a 69 00:03:54,330 --> 00:03:58,030 style that each individual has to develop their style, but 70 00:03:58,030 --> 00:04:01,250 they can't develop a very haphazard style so there's a 71 00:04:01,250 --> 00:04:04,600 certain set of good styles, certain bad styles. 72 00:04:04,600 --> 00:04:09,020 And the problem that is in a large class we can grade for 73 00:04:09,020 --> 00:04:13,040 correctness very easily, we can also look at the programs 74 00:04:13,040 --> 00:04:15,130 and have a very fast thing, okay, saying, here are no 75 00:04:15,130 --> 00:04:18,480 comments, or your comment doesn't seem to be, it's too 76 00:04:18,480 --> 00:04:22,500 verbose, or some very high level feedback, but it's very 77 00:04:22,500 --> 00:04:26,060 hard to help somebody build their style. 78 00:04:26,060 --> 00:04:30,240 And so what you guys are coming into is to help us get 79 00:04:30,240 --> 00:04:33,540 these young students create their own style of 80 00:04:33,540 --> 00:04:34,420 programming. 81 00:04:34,420 --> 00:04:37,150 The nice thing about this class-- 82 00:04:37,150 --> 00:04:42,380 and also sometimes last year the masters found it a little 83 00:04:42,380 --> 00:04:45,930 bit hard was, we are giving them small amount of code. 84 00:04:45,930 --> 00:04:49,770 They are doing performance engineering on a maximum 85 00:04:49,770 --> 00:04:51,590 couple of hundred lines of code. 86 00:04:51,590 --> 00:04:53,780 There's no very complicated class structures or 87 00:04:53,780 --> 00:04:54,660 something like that. 88 00:04:54,660 --> 00:04:57,920 So we are not looking at the style and software engineering 89 00:04:57,920 --> 00:05:03,290 in the macro level, how to structure large classes but 90 00:05:03,290 --> 00:05:05,090 more at the micro level. 91 00:05:05,090 --> 00:05:08,070 In each method do they have right style? 92 00:05:08,070 --> 00:05:09,870 Are they is it clean? 93 00:05:09,870 --> 00:05:13,130 Are they commenting them properly, or 94 00:05:13,130 --> 00:05:14,000 can they do it better? 95 00:05:14,000 --> 00:05:16,590 So at that level at least the building blocks that they're-- 96 00:05:16,590 --> 00:05:20,020 as they go build a larger and larger program they can 97 00:05:20,020 --> 00:05:20,970 hopefully use. 98 00:05:20,970 --> 00:05:24,040 So that's what we're looking at, and it helps to instead of 99 00:05:24,040 --> 00:05:26,540 dumping you ten thousand lines of code, you only get a couple 100 00:05:26,540 --> 00:05:29,610 of hundred lines of code, so you can actually go through it 101 00:05:29,610 --> 00:05:32,120 a lot more carefully, and help them out. 102 00:05:32,120 --> 00:05:38,940 So this is starting with a crazy eye chart that is our 103 00:05:38,940 --> 00:05:42,210 new curriculum that we introduced in the department. 104 00:05:42,210 --> 00:05:46,670 So what you have is some early courses in here, these are 105 00:05:46,670 --> 00:05:48,590 basically very general math courses, early 106 00:05:48,590 --> 00:05:50,930 courses that do-- 107 00:05:50,930 --> 00:05:53,380 they probably write about ten lines of code type thing in 108 00:05:53,380 --> 00:05:56,570 these courses, and then we feed into these foundation 109 00:05:56,570 --> 00:06:04,463 courses and then after that we sit at, this says 197, 110 00:06:04,463 --> 00:06:06,650 actually what should be 172. 111 00:06:06,650 --> 00:06:14,340 We sit at that level, so we are sitting at that level, and 112 00:06:14,340 --> 00:06:17,340 then the prerequisite for people who are coming is that 113 00:06:17,340 --> 00:06:18,920 they're taking a computer architecture course so they 114 00:06:18,920 --> 00:06:20,620 know a little bit about architecture. 115 00:06:20,620 --> 00:06:23,620 They have taken this introductory software course, 116 00:06:23,620 --> 00:06:26,850 so they have written some Java programs, and so they know a 117 00:06:26,850 --> 00:06:28,930 little bit about software engineering from that course, 118 00:06:28,930 --> 00:06:30,970 and they have taken algorithms course, so they understand 119 00:06:30,970 --> 00:06:32,800 algorithms somewhat, so this is the background of the 120 00:06:32,800 --> 00:06:34,890 people are coming in. 121 00:06:34,890 --> 00:06:37,260 At the low end there might be some people who have only 122 00:06:37,260 --> 00:06:40,370 written couple of thousand lines of code in their lives, 123 00:06:40,370 --> 00:06:44,350 and there are other people who are, written half probably-- 124 00:06:44,350 --> 00:06:45,180 the Linux kernel. 125 00:06:45,180 --> 00:06:50,920 So there are kind of very diversified group of people. 126 00:06:50,920 --> 00:06:54,420 But there's some people who it's really new to them, and 127 00:06:54,420 --> 00:06:59,280 they don't even understand why you had to do good nice 128 00:06:59,280 --> 00:07:01,020 programming, why do you have to document these things. 129 00:07:01,020 --> 00:07:03,950 I mean, for them it's a very new concept, because they 130 00:07:03,950 --> 00:07:04,790 haven't seen that. 131 00:07:04,790 --> 00:07:07,050 So OK, if you're writing ten lines, OK, why do you need 132 00:07:07,050 --> 00:07:09,240 document that, I know how to do this. 133 00:07:09,240 --> 00:07:11,870 So part of that is this is, for a lot of them it's eye 134 00:07:11,870 --> 00:07:14,850 opening, and in last year also we talked to students, they 135 00:07:14,850 --> 00:07:18,075 actually gained a lot from talking to you guys. 136 00:07:18,075 --> 00:07:20,910 It's easy for us to tell them do it, a lot of them say OK, 137 00:07:20,910 --> 00:07:23,150 just to get the grade, I will do it, but after that I'm 138 00:07:23,150 --> 00:07:25,980 never going to do these things, and they just go off 139 00:07:25,980 --> 00:07:28,940 in very like, mad at us for asking them to do it, but when 140 00:07:28,940 --> 00:07:32,070 you guys say this is what happens in industry, there's a 141 00:07:32,070 --> 00:07:35,930 lot more impact on what they're going to do. 142 00:07:35,930 --> 00:07:39,240 And so I would go through very fast, so we have done case 143 00:07:39,240 --> 00:07:44,130 study on Matrix Multiply show doing how you can basically do 144 00:07:44,130 --> 00:07:46,580 things like algorithmic tricks, architecture tricks, 145 00:07:46,580 --> 00:07:47,800 and stuff like that get really good 146 00:07:47,800 --> 00:07:49,590 performance on Matrix Multiply. 147 00:07:49,590 --> 00:07:54,030 So we started with doing very object oriented, immutable 148 00:07:54,030 --> 00:07:58,570 type matrices, Matrix Multiply and then go 149 00:07:58,570 --> 00:08:00,050 down to doing blast. 150 00:08:00,050 --> 00:08:02,350 How much a performance gap do you think that has? 151 00:08:02,350 --> 00:08:07,043 152 00:08:07,043 --> 00:08:10,138 AUDIENCE: It probably depends on how big the 153 00:08:10,138 --> 00:08:11,081 matrices are because-- 154 00:08:11,081 --> 00:08:12,880 SAMAN AMARASINGHE: Yeah it is 2k by a 2k 155 00:08:12,880 --> 00:08:17,030 matrix so it is, yeah-- 156 00:08:17,030 --> 00:08:18,710 So somebody said 200x. 157 00:08:18,710 --> 00:08:19,680 AUDIENCE: 10x 158 00:08:19,680 --> 00:08:21,590 SAMAN AMARASINGHE: Yeah 10x, so actually, in fact we've 159 00:08:21,590 --> 00:08:25,340 been-- since I started with the immutable matrix, very 160 00:08:25,340 --> 00:08:28,300 object oriented stuff like that, and then did all to 161 00:08:28,300 --> 00:08:31,690 optimize I could, I got 300,000x. 162 00:08:31,690 --> 00:08:36,799 So this is kind of extreme case, but it illustrates how 163 00:08:36,799 --> 00:08:39,659 much, kind of, performance sometimes is hidden in these 164 00:08:39,659 --> 00:08:40,870 applications. 165 00:08:40,870 --> 00:08:45,830 And then we talk bunch about, these are done lectures, talk 166 00:08:45,830 --> 00:08:49,960 about some very simple things in performance engineering, 167 00:08:49,960 --> 00:08:54,325 how to optimize loops, things like how to get the compiler 168 00:08:54,325 --> 00:08:55,590 to do certain things. 169 00:08:55,590 --> 00:08:58,150 Some basic facts, we have bunch of rules in there that 170 00:08:58,150 --> 00:08:59,900 we went through fast. 171 00:08:59,900 --> 00:09:03,460 And we are going to do introduce them to performance 172 00:09:03,460 --> 00:09:05,160 analysis for a lot of these people. 173 00:09:05,160 --> 00:09:07,080 First of all, they don't even know their code is running 174 00:09:07,080 --> 00:09:09,000 bad, because they don't know how to look at it other than 175 00:09:09,000 --> 00:09:10,305 getting one number then. 176 00:09:10,305 --> 00:09:12,470 Even if they know that their code is running bad, how do 177 00:09:12,470 --> 00:09:14,610 you go about figuring out what's going on? 178 00:09:14,610 --> 00:09:16,460 They know a little bit about GDB but they don't know 179 00:09:16,460 --> 00:09:18,150 anything about performance analysis, so we are 180 00:09:18,150 --> 00:09:21,280 introducing them to tools in here. 181 00:09:21,280 --> 00:09:24,310 And we are talking about C to Machine Code, lot of them are 182 00:09:24,310 --> 00:09:27,460 Java programmers, we already gave them a C primer, saying 183 00:09:27,460 --> 00:09:30,570 if you're Java what does C mean, kind of a thing. 184 00:09:30,570 --> 00:09:34,740 And I actually talk about computer architecture today 185 00:09:34,740 --> 00:09:38,780 and talk about the entire process they're going to use. 186 00:09:38,780 --> 00:09:41,110 They're using this Nehalem processor and all of the 187 00:09:41,110 --> 00:09:43,290 interesting things that happen inside the processor that they 188 00:09:43,290 --> 00:09:44,800 had to be aware of. 189 00:09:44,800 --> 00:09:46,770 And the same, maybe I will talk about the memory system 190 00:09:46,770 --> 00:09:52,510 optimization, and then Charles is going to talk about 191 00:09:52,510 --> 00:09:58,200 algorithms and data structures for caches in there and some 192 00:09:58,200 --> 00:10:00,370 about storage allocation. 193 00:10:00,370 --> 00:10:03,470 We'll have a bunch of lectures on parallelism that Charles is 194 00:10:03,470 --> 00:10:07,340 going to use Cilk Language to illustrate how to write 195 00:10:07,340 --> 00:10:08,660 parallel programs, that's what we are going 196 00:10:08,660 --> 00:10:10,810 to use in this class. 197 00:10:10,810 --> 00:10:13,660 And then more on parallelism, some things like data 198 00:10:13,660 --> 00:10:19,050 synchronization issues, dig deep into other performance 199 00:10:19,050 --> 00:10:21,270 issues in parallelism in there. 200 00:10:21,270 --> 00:10:24,160 And then since their final project is on Ray Tracing, 201 00:10:24,160 --> 00:10:28,130 we'll introduce them to a Ray Tracing primer, and see how 202 00:10:28,130 --> 00:10:29,970 Ray Tracing is done and so they can go 203 00:10:29,970 --> 00:10:32,510 into their final project. 204 00:10:32,510 --> 00:10:34,190 Then I'm going to talk a little bit about compile 205 00:10:34,190 --> 00:10:37,190 optimization, what compilers can do for you, and how to get 206 00:10:37,190 --> 00:10:39,500 compilers to do those things for you. 207 00:10:39,500 --> 00:10:42,160 And a little bit about distributed systems, so how 208 00:10:42,160 --> 00:10:44,100 can you scale out on this point? 209 00:10:44,100 --> 00:10:46,810 It's about getting a small piece of code to run fast, now 210 00:10:46,810 --> 00:10:51,640 how do we get millions of users go to this very large 211 00:10:51,640 --> 00:10:53,760 scale system, and get them to work, and 212 00:10:53,760 --> 00:10:55,850 what issues are involved. 213 00:10:55,850 --> 00:10:59,210 And then we are going to also have about three or four case 214 00:10:59,210 --> 00:11:00,620 studies sprinkled around. 215 00:11:00,620 --> 00:11:02,770 We'll get someone from University come and talk 216 00:11:02,770 --> 00:11:05,670 specific problems, OK, look I had this problem, and at the 217 00:11:05,670 --> 00:11:06,525 beginning it was bad. 218 00:11:06,525 --> 00:11:09,812 Here's how I went about figuring out why and here are 219 00:11:09,812 --> 00:11:13,230 the things I tried, these are things worked, these didn't 220 00:11:13,230 --> 00:11:14,490 work, and how we went go. 221 00:11:14,490 --> 00:11:18,060 So kind of a very hands on case studies about doing 222 00:11:18,060 --> 00:11:21,890 performance because what these people has to do is develop a 223 00:11:21,890 --> 00:11:22,690 methodology. 224 00:11:22,690 --> 00:11:25,020 Their own methodology of how to go about solving these 225 00:11:25,020 --> 00:11:27,030 problems, and then looking at these case studies will give 226 00:11:27,030 --> 00:11:30,180 them a feel how a very experienced person will go 227 00:11:30,180 --> 00:11:32,120 about looking at some of those problems. 228 00:11:32,120 --> 00:11:35,350 So these are the kind of lectures we 229 00:11:35,350 --> 00:11:37,280 are doing in a nutshell. 230 00:11:37,280 --> 00:11:40,180 So the projects we are doing. 231 00:11:40,180 --> 00:11:43,930 So students' mission, what we do is we write some 232 00:11:43,930 --> 00:11:47,730 inefficient piece of code, not that long, and we give them 233 00:11:47,730 --> 00:11:50,830 the specific, here so this is functionally correct but it 234 00:11:50,830 --> 00:11:52,220 runs darn slow. 235 00:11:52,220 --> 00:11:55,620 And what you can say is, OK, take advantage of right now, 236 00:11:55,620 --> 00:11:58,270 the first project is basically looking at algorithmic and 237 00:11:58,270 --> 00:11:59,870 data structure inefficiencies. 238 00:11:59,870 --> 00:12:03,230 So OK, trying to find better ways of doing that and change 239 00:12:03,230 --> 00:12:04,850 this program to run faster. 240 00:12:04,850 --> 00:12:06,820 So that's their thing, so they don't have deal with thousands 241 00:12:06,820 --> 00:12:07,570 of lines of code. 242 00:12:07,570 --> 00:12:11,945 Small program, it's correct, to run them faster, and this 243 00:12:11,945 --> 00:12:14,170 we'll also be asking them to write tests, so you can 244 00:12:14,170 --> 00:12:16,760 actually test their implementation, and make sure 245 00:12:16,760 --> 00:12:19,260 that implementation are also correct. 246 00:12:19,260 --> 00:12:21,560 And basically there's no right answer. 247 00:12:21,560 --> 00:12:23,980 This drives students crazy because they are like, "When 248 00:12:23,980 --> 00:12:26,750 am I done?" I'm like, "You're never done until the 249 00:12:26,750 --> 00:12:30,570 deadline," because you can keep doing more and more and 250 00:12:30,570 --> 00:12:34,340 you could keep increasing performance in there, and of 251 00:12:34,340 --> 00:12:37,900 course if you hit very marginal returns and at some 252 00:12:37,900 --> 00:12:42,180 point and you might decide, OK, that's good enough. 253 00:12:42,180 --> 00:12:45,840 And also more times the journey is as 254 00:12:45,840 --> 00:12:47,220 important as the outcome. 255 00:12:47,220 --> 00:12:49,140 So at the end of the day you can say I got it very fast, 256 00:12:49,140 --> 00:12:50,260 but how did you get there? 257 00:12:50,260 --> 00:12:51,470 What's the process you followed? 258 00:12:51,470 --> 00:12:54,370 Some of these programs are easy to get there, but if you 259 00:12:54,370 --> 00:12:58,550 haven't learned that process you can't scale it out. 260 00:12:58,550 --> 00:13:01,360 And so, a lot of times your part is to talk to them and 261 00:13:01,360 --> 00:13:03,550 say, "What did you do?" And say, "Okay look why did you 262 00:13:03,550 --> 00:13:06,820 skip that stage, why didn't you profile it?" And get them 263 00:13:06,820 --> 00:13:08,440 to get do that. 264 00:13:08,440 --> 00:13:09,870 And some will say, "Yeah, I just look at it, I realize 265 00:13:09,870 --> 00:13:11,880 what it is." Like, no just do something there might be 266 00:13:11,880 --> 00:13:13,720 something hidden in there, so get through the process, 267 00:13:13,720 --> 00:13:17,650 understand the process, that's the important. 268 00:13:17,650 --> 00:13:22,000 So the way the project works is, we give them a project, we 269 00:13:22,000 --> 00:13:27,040 start them the project, and there might be, some projects 270 00:13:27,040 --> 00:13:33,030 have two parts in there, and final and a project request 271 00:13:33,030 --> 00:13:36,580 design document for them to give us, saying what they 272 00:13:36,580 --> 00:13:39,490 figure out what's bad and what kind of optimizing they are 273 00:13:39,490 --> 00:13:42,440 thinking of doing in this project. 274 00:13:42,440 --> 00:13:44,470 And then we have a thing called a beta turn-in. 275 00:13:44,470 --> 00:13:48,190 They said OK look we ran this, we got the project and turned 276 00:13:48,190 --> 00:13:50,600 the product in, an we call it a beta, because 277 00:13:50,600 --> 00:13:52,050 I'll tell you why. 278 00:13:52,050 --> 00:13:54,880 And then what we do is, we run everybody's project against 279 00:13:54,880 --> 00:13:57,960 everybody, basically we run every project, and we figure 280 00:13:57,960 --> 00:14:00,790 out who got the fastest implementation. 281 00:14:00,790 --> 00:14:02,430 And we said OK, we announced this and said this is the 282 00:14:02,430 --> 00:14:06,430 fastest implementation, and then we figure out how off are 283 00:14:06,430 --> 00:14:09,550 you from the fastest, and we have a proportion of the grade 284 00:14:09,550 --> 00:14:10,990 that's basically computer graded. 285 00:14:10,990 --> 00:14:13,790 So we figure the fastest, you'll get 100% for something 286 00:14:13,790 --> 00:14:16,940 that on the other hand if you are 10x slower you get 10%. 287 00:14:16,940 --> 00:14:20,900 Except, the first time we tried, the fastest was 1,000x 288 00:14:20,900 --> 00:14:24,880 better than the slowest, so somebody got like 0.1%, that 289 00:14:24,880 --> 00:14:28,950 didn't work, so we are doing square root of the former so 290 00:14:28,950 --> 00:14:32,390 they'll be little bit more, in the 291 00:14:32,390 --> 00:14:34,570 somebody, got 1,000x there. 292 00:14:34,570 --> 00:14:37,570 So sometimes it's because somebody just missed one 293 00:14:37,570 --> 00:14:42,200 critical insight and so and also they might not have done 294 00:14:42,200 --> 00:14:44,280 the test properly and stuff like this, so we give them 295 00:14:44,280 --> 00:14:44,810 opportunity. 296 00:14:44,810 --> 00:14:48,200 And then after this beta turn-in you get this code, and 297 00:14:48,200 --> 00:14:52,340 the TAs get this code to run and do a very fast check over 298 00:14:52,340 --> 00:14:56,560 that and that, and then they are going to have a week to 299 00:14:56,560 --> 00:15:00,110 find a time with you, sit down for hour or 90 minutes, and go 300 00:15:00,110 --> 00:15:01,350 through this code. 301 00:15:01,350 --> 00:15:04,420 And then they will get all the feedback, the performance 302 00:15:04,420 --> 00:15:06,610 feedback, and they can talk to people and figure out what 303 00:15:06,610 --> 00:15:09,290 they missed and they get another chance to fix all 304 00:15:09,290 --> 00:15:11,770 those things, get the performance up to turn in, and 305 00:15:11,770 --> 00:15:13,550 there'll be another performance measurement, but 306 00:15:13,550 --> 00:15:16,120 now if they match up to that point, they can get a full 307 00:15:16,120 --> 00:15:20,880 amount so of course, if people exceed they don't get extra, 308 00:15:20,880 --> 00:15:23,600 because we want to limit the competition, but at least you 309 00:15:23,600 --> 00:15:25,980 get a chance to kind of match up the best code. 310 00:15:25,980 --> 00:15:30,290 So, what you have is this design review week, that they 311 00:15:30,290 --> 00:15:34,380 get to talk to you, and get feedback and, then after that, 312 00:15:34,380 --> 00:15:36,762 they fix everything up and then resubmit it. 313 00:15:36,762 --> 00:15:38,960 PROFESSOR: You should mention the beta tests. 314 00:15:38,960 --> 00:15:41,940 SAMAN AMARASINGHE: Yes, so what also we do in this is 315 00:15:41,940 --> 00:15:44,940 we're asking them also to create a test suite, and we 316 00:15:44,940 --> 00:15:48,050 are going to run everybody's programs against everybody's 317 00:15:48,050 --> 00:15:53,750 test suite, and also give them points on coverage of their 318 00:15:53,750 --> 00:15:57,910 suite, and also how well their program does 319 00:15:57,910 --> 00:15:58,760 against everybody else. 320 00:15:58,760 --> 00:16:03,380 So if somebody finds lot of bugs in other programs, or 321 00:16:03,380 --> 00:16:06,870 some there's a test that founds couple of bugs that 322 00:16:06,870 --> 00:16:09,740 nobody else found we will give a lot of points for that 323 00:16:09,740 --> 00:16:12,040 person, because that means they went and did a really 324 00:16:12,040 --> 00:16:13,480 good job in creating a test suite. 325 00:16:13,480 --> 00:16:16,330 So we are actually using that to basically emphasize on 326 00:16:16,330 --> 00:16:19,290 testing and testability issues in there. 327 00:16:19,290 --> 00:16:22,280 And then final, when you're turn in, then the TAs will, at 328 00:16:22,280 --> 00:16:25,770 that point, will grade for performance and also the 329 00:16:25,770 --> 00:16:26,760 coding style. 330 00:16:26,760 --> 00:16:29,680 So that time they will go to the code and assign the grade. 331 00:16:29,680 --> 00:16:32,310 And so if the students have listened to you, and carried 332 00:16:32,310 --> 00:16:35,100 out what you said, they should get really good grades on that 333 00:16:35,100 --> 00:16:35,970 part, and then they had to also provide 334 00:16:35,970 --> 00:16:38,080 a write up in that. 335 00:16:38,080 --> 00:16:42,110 So this is kind of the flow of the projects we have. 336 00:16:42,110 --> 00:16:46,580 And the project one is a simple algorithmic and data 337 00:16:46,580 --> 00:16:47,200 structure trick. 338 00:16:47,200 --> 00:16:52,160 So we did things like data rotator, bit flip counter, and 339 00:16:52,160 --> 00:16:54,800 this Pentominoes Puzzle that he's going to 340 00:16:54,800 --> 00:16:55,850 explain a little bit. 341 00:16:55,850 --> 00:16:58,720 So we give these things, that we have a pretty inefficient 342 00:16:58,720 --> 00:17:03,300 representation, where most of them has a much better bit 343 00:17:03,300 --> 00:17:06,400 representation, and you can do bit tricks to basically get 344 00:17:06,400 --> 00:17:07,060 good performance. 345 00:17:07,060 --> 00:17:09,829 So these are algorithmic and data structure representations 346 00:17:09,829 --> 00:17:11,670 that can have huge performance gains. 347 00:17:11,670 --> 00:17:14,430 So this is the first project and this is what next week 348 00:17:14,430 --> 00:17:16,819 you're going to get. 349 00:17:16,819 --> 00:17:20,119 So project two is more about memory system performance, 350 00:17:20,119 --> 00:17:22,660 things like image rotator and number sorting. 351 00:17:22,660 --> 00:17:25,359 We have two parts, the first part is we give them these 352 00:17:25,359 --> 00:17:28,650 problems, and they're supposed to run with different data set 353 00:17:28,650 --> 00:17:32,790 sizes, look at performance counter results and identify 354 00:17:32,790 --> 00:17:34,810 what's going on with these programs. 355 00:17:34,810 --> 00:17:37,830 So there's one thing that we'll give them bunch of 356 00:17:37,830 --> 00:17:40,700 source compiled, and they have to figure out which sort is 357 00:17:40,700 --> 00:17:45,000 which by looking at performance counters and 358 00:17:45,000 --> 00:17:45,690 different ones. 359 00:17:45,690 --> 00:17:48,180 So you had to identify, so basically give them idea to 360 00:17:48,180 --> 00:17:51,890 basically observe a program behavior, and then we ask them 361 00:17:51,890 --> 00:17:53,300 to go and fix some of the performance 362 00:17:53,300 --> 00:17:54,690 issues as a second part. 363 00:17:54,690 --> 00:17:57,690 So this is a lot about basically getting performance 364 00:17:57,690 --> 00:18:01,090 information, understanding a lot of hardware, what's going 365 00:18:01,090 --> 00:18:04,290 on and then going and doing some performance fixes. 366 00:18:04,290 --> 00:18:06,850 So there'll be two parts, to this project. 367 00:18:06,850 --> 00:18:10,090 And the project three is implementing 368 00:18:10,090 --> 00:18:12,970 efficient storage allocator. 369 00:18:12,970 --> 00:18:15,890 Most of these students find after they've done the Java 370 00:18:15,890 --> 00:18:18,830 and Python, they come thinking there are these objects 371 00:18:18,830 --> 00:18:21,850 running in memory, with a thing called pointer that 372 00:18:21,850 --> 00:18:26,360 points to, and to understand what a pointer is 373 00:18:26,360 --> 00:18:27,580 is sometimes hard. 374 00:18:27,580 --> 00:18:30,390 And this is an interesting example that they actually do 375 00:18:30,390 --> 00:18:32,390 a lot of pointer manipulations, and you have to 376 00:18:32,390 --> 00:18:34,420 get a lot of those things right and you have to have 377 00:18:34,420 --> 00:18:37,030 good discipline to do that, as well as getting some 378 00:18:37,030 --> 00:18:41,450 performance, so this is interesting project in there. 379 00:18:41,450 --> 00:18:44,520 Here you don't get too much of performance variance but 380 00:18:44,520 --> 00:18:48,030 students have to think very carefully about basically 381 00:18:48,030 --> 00:18:51,550 aliasing data structures and stuff like that. 382 00:18:51,550 --> 00:18:54,620 So getting some of this dirty little things you have to do, 383 00:18:54,620 --> 00:18:58,430 and learning how do it right. 384 00:18:58,430 --> 00:19:00,710 And then we go into parallel programming. 385 00:19:00,710 --> 00:19:05,050 So first part is introducing the concept of parallelism 386 00:19:05,050 --> 00:19:07,460 giving them some simple programs to basically 387 00:19:07,460 --> 00:19:14,310 parallelize, and then the second part is we give them 388 00:19:14,310 --> 00:19:17,650 insertion detection we're inserting a bunch of lines 389 00:19:17,650 --> 00:19:22,120 into a image and then they have to figure out when these 390 00:19:22,120 --> 00:19:27,570 lines move when they actually intersect, and so it's not 391 00:19:27,570 --> 00:19:31,360 embracing a parallel, you have to actually do by 392 00:19:31,360 --> 00:19:34,940 intersegmenting the data into regions and basically figuring 393 00:19:34,940 --> 00:19:36,550 out where communication is. 394 00:19:36,550 --> 00:19:38,600 So there's a lot of issue in there to get it done. 395 00:19:38,600 --> 00:19:41,640 It's a fairly complex program that they have to to deal with 396 00:19:41,640 --> 00:19:45,410 and so they're going to have to think through a lot of 397 00:19:45,410 --> 00:19:47,410 parallelism issues, synchronization issues, 398 00:19:47,410 --> 00:19:49,450 communication issues, all those things come 399 00:19:49,450 --> 00:19:52,650 into play in here. 400 00:19:52,650 --> 00:19:57,010 And then project 5 is just a problem set because we want to 401 00:19:57,010 --> 00:19:59,740 get to make sure that they understood some basic material 402 00:19:59,740 --> 00:20:01,530 we did, so you don't have to deal with that. 403 00:20:01,530 --> 00:20:03,220 We give them, actually, a write up they don't have to do 404 00:20:03,220 --> 00:20:07,510 any coding in there and they turn that in as a normal 405 00:20:07,510 --> 00:20:08,780 problem set. 406 00:20:08,780 --> 00:20:13,010 And the project six also you don't have time to critique 407 00:20:13,010 --> 00:20:16,970 that because it is delivered the last day of class, but if 408 00:20:16,970 --> 00:20:21,280 you're interested in basically giving them some feedback, or, 409 00:20:21,280 --> 00:20:24,110 just come in to the finals and see how they do. 410 00:20:24,110 --> 00:20:26,720 So there what they do is, this is a really fun project, we 411 00:20:26,720 --> 00:20:31,625 give them a very unoptimized ray tracer, and we okay here's 412 00:20:31,625 --> 00:20:34,620 an image that it can generate. 413 00:20:34,620 --> 00:20:37,210 If you generate image that looks the same to 414 00:20:37,210 --> 00:20:38,390 us, you'll be OK. 415 00:20:38,390 --> 00:20:40,660 So you can change the algorithms you are doing, come 416 00:20:40,660 --> 00:20:43,070 up with other things you can do, where you can still 417 00:20:43,070 --> 00:20:48,170 maintain the visual equivalence and then you can 418 00:20:48,170 --> 00:20:50,650 do that, you can optimize, you can parallelize, you can do 419 00:20:50,650 --> 00:20:54,220 anything you want and build a ray tracer. 420 00:20:54,220 --> 00:20:58,840 So they go and then we explain to them the basics of ray 421 00:20:58,840 --> 00:21:03,260 tracing and they do lot of cool things and a lot of these 422 00:21:03,260 --> 00:21:05,450 kids actually really change, think through algorithmic 423 00:21:05,450 --> 00:21:11,490 issues, even look at a lot of graphics and find different 424 00:21:11,490 --> 00:21:14,120 ways, or better ways of doing things, and come up with 425 00:21:14,120 --> 00:21:18,250 really cool tricks and then do really well. 426 00:21:18,250 --> 00:21:21,300 So for that we will invite you guys to come to the-- 427 00:21:21,300 --> 00:21:25,130 then we will have basically a bake off, everyone will come 428 00:21:25,130 --> 00:21:27,770 and figure out who has the fastest ray tracer, and they 429 00:21:27,770 --> 00:21:30,640 have the bragging rights, as well as the grade of having 430 00:21:30,640 --> 00:21:34,682 the fastest ray tracer, so-- 431 00:21:34,682 --> 00:21:36,110 PROFESSOR: I'm going to go through this. 432 00:21:36,110 --> 00:21:37,180 SAMAN AMARASINGHE: Okay, you go through-- we have the 433 00:21:37,180 --> 00:21:38,260 schedule here. 434 00:21:38,260 --> 00:21:43,740 So the most programs are done in C, and very little C++, not 435 00:21:43,740 --> 00:21:47,190 very complex C++ classes, or anything like that. 436 00:21:47,190 --> 00:21:50,990 We want them to be very close to the metal. 437 00:21:50,990 --> 00:21:54,180 They have been trained in a lot of abstract programming in 438 00:21:54,180 --> 00:21:56,370 Java, Python and stuff like that, now they're going to get 439 00:21:56,370 --> 00:21:59,440 to the metal, and understand things like pointers, malloc 440 00:21:59,440 --> 00:22:02,540 and free, native data types and stuff like that. 441 00:22:02,540 --> 00:22:05,740 442 00:22:05,740 --> 00:22:09,410 We're not dealing with things like dealing in garbage 443 00:22:09,410 --> 00:22:12,660 collection and bound checks, and all the other things, so 444 00:22:12,660 --> 00:22:15,350 they're really seeing what's going close to the metal, and 445 00:22:15,350 --> 00:22:17,130 sometimes we are even encouraging to look at at a 446 00:22:17,130 --> 00:22:19,065 little bit of assembly work, that's not really required. 447 00:22:19,065 --> 00:22:21,570 448 00:22:21,570 --> 00:22:23,710 AUDIENCE: Have these students had exposure to any kind of 449 00:22:23,710 --> 00:22:25,510 assembly language programing? 450 00:22:25,510 --> 00:22:29,260 SAMAN AMARASINGHE: In 004, they are using some assembly 451 00:22:29,260 --> 00:22:32,220 programming for in the architecture class, but I 452 00:22:32,220 --> 00:22:36,750 think it's a very simple, I think RISC machine inspection 453 00:22:36,750 --> 00:22:38,000 they're doing. 454 00:22:38,000 --> 00:22:40,370 455 00:22:40,370 --> 00:22:46,570 And then we will have our course website as you go about 456 00:22:46,570 --> 00:22:49,820 you can look at what the course is doing and also if 457 00:22:49,820 --> 00:22:54,700 you change this F10 to a F09 you will see last year's code. 458 00:22:54,700 --> 00:22:58,530 So you can actually even see into the future what we have 459 00:22:58,530 --> 00:22:58,830 been doing. 460 00:22:58,830 --> 00:23:01,720 So if you want to kind of preface from the front. 461 00:23:01,720 --> 00:23:05,017 AUDIENCE: I took a look at this website and found that 462 00:23:05,017 --> 00:23:08,740 most of it was unavailable because of-- 463 00:23:08,740 --> 00:23:10,390 SAMAN AMARASINGHE: We should have Word readable we need to 464 00:23:10,390 --> 00:23:12,510 make it if it's not Word readable-- 465 00:23:12,510 --> 00:23:15,250 AUDIENCE: It says it's Word readable. 466 00:23:15,250 --> 00:23:15,660 To us. 467 00:23:15,660 --> 00:23:17,680 GUEST SPEAKER: Some of it is a lot of it was not I've said 468 00:23:17,680 --> 00:23:20,040 you need to, I mean it's all available for- 469 00:23:20,040 --> 00:23:20,340 AUDIENCE: Certificate? 470 00:23:20,340 --> 00:23:23,350 SAMAN AMARASINGHE: We will check that, because all this 471 00:23:23,350 --> 00:23:25,080 things that we have set up in the background to get 472 00:23:25,080 --> 00:23:27,140 everything Word-- we want to make everything Word readable, 473 00:23:27,140 --> 00:23:28,845 so we'll make sure that happens. 474 00:23:28,845 --> 00:23:35,530 So, OK, so that's all I have about the class and one thing 475 00:23:35,530 --> 00:23:38,920 interesting more so this projects, the best to worst 476 00:23:38,920 --> 00:23:41,230 can sometimes be 1,000x difference. 477 00:23:41,230 --> 00:23:43,900 So what that means, even for the people who are struggling, 478 00:23:43,900 --> 00:23:45,840 they can get something out of the class. 479 00:23:45,840 --> 00:23:48,870 But unlike other classes where you just read the limit and 480 00:23:48,870 --> 00:23:51,450 then you're bored, you can really keep pushing the limit, 481 00:23:51,450 --> 00:23:53,400 especially things like the final product, the people who 482 00:23:53,400 --> 00:23:56,280 did well really pushed the limits, they could have done 483 00:23:56,280 --> 00:23:58,450 that for a graphics class type thing. 484 00:23:58,450 --> 00:24:01,420 I mean they pushed algorithms changes, did amazing 485 00:24:01,420 --> 00:24:04,200 parallelization techniques, data partitioning, everything. 486 00:24:04,200 --> 00:24:06,590 And where some people just kind of stayed within that and 487 00:24:06,590 --> 00:24:10,430 did some small parallelization got some like low hanging 488 00:24:10,430 --> 00:24:11,680 fruit in there. 489 00:24:11,680 --> 00:24:13,660 490 00:24:13,660 --> 00:24:15,630 I mean what we're trying to do is, computer science these 491 00:24:15,630 --> 00:24:18,310 days, we get some students, as I said, their first time 492 00:24:18,310 --> 00:24:20,650 they're coding anything more than ten lines and other 493 00:24:20,650 --> 00:24:27,130 people who are already a submitter for open source 494 00:24:27,130 --> 00:24:29,020 projects, who have written millions of lines of code, we 495 00:24:29,020 --> 00:24:30,100 have these two. 496 00:24:30,100 --> 00:24:32,700 And these codes, I think we are trying to cater to at 497 00:24:32,700 --> 00:24:36,770 every level, and keep everybody basically very 498 00:24:36,770 --> 00:24:38,680 motivated, and excited to be in there. 499 00:24:38,680 --> 00:24:41,540 And I think the last year it was a pretty good success. 500 00:24:41,540 --> 00:24:46,790 And they really enjoy meeting masters last year, and after 501 00:24:46,790 --> 00:24:48,760 we go to discussion we can talk about that a little bit. 502 00:24:48,760 --> 00:24:52,010 PROFESSOR: So we have two websites, as Saman mentioned 503 00:24:52,010 --> 00:24:55,570 before, so here they are, and then here's the schedule. 504 00:24:55,570 --> 00:25:00,510 So we'll run through this, in more detail for what is 505 00:25:00,510 --> 00:25:04,040 expected of you, in a moment, but basically there's four 506 00:25:04,040 --> 00:25:06,880 projects that's sort of are organized along here. 507 00:25:06,880 --> 00:25:08,660 Oops, that typo didn't get fixed. 508 00:25:08,660 --> 00:25:16,060 That's should be November 19 obviously there, instead of 509 00:25:16,060 --> 00:25:17,450 October 19 if you want to correct 510 00:25:17,450 --> 00:25:20,540 that on your calendars. 511 00:25:20,540 --> 00:25:25,700 OK, so in general it begins with an information session 512 00:25:25,700 --> 00:25:28,270 which you're allowed to attend in person but most people just 513 00:25:28,270 --> 00:25:30,700 dial in, it's more convenient. 514 00:25:30,700 --> 00:25:36,870 Then we will provide you with the beta code submitted by 515 00:25:36,870 --> 00:25:39,910 your four students and then you'll have two meetings that 516 00:25:39,910 --> 00:25:44,880 typically are 60 to 90 minutes with each of your two pairs. 517 00:25:44,880 --> 00:25:50,815 OK, so let's go through how this is working. 518 00:25:50,815 --> 00:26:00,080 519 00:26:00,080 --> 00:26:05,440 So the first thing is just to make sure you folks recognize 520 00:26:05,440 --> 00:26:06,650 that you're making a commitment. 521 00:26:06,650 --> 00:26:12,490 It's very difficult for us, and it's even more difficult 522 00:26:12,490 --> 00:26:16,570 for the students, to cope with something that happens 523 00:26:16,570 --> 00:26:18,150 mid-term, OK? 524 00:26:18,150 --> 00:26:24,540 Where suddenly their master disappeared, or whatever, so 525 00:26:24,540 --> 00:26:28,460 we're very big on anti-flakiness, if you will. 526 00:26:28,460 --> 00:26:31,240 And so if you believe that there's going to be a problem 527 00:26:31,240 --> 00:26:34,650 please let us know as much in advance as you can. 528 00:26:34,650 --> 00:26:37,540 Sometimes things are unavoidable, they come up, we 529 00:26:37,540 --> 00:26:39,990 don't fault you for that or anything, OK? 530 00:26:39,990 --> 00:26:42,580 Just let us know, we'll try to deal with the situation. 531 00:26:42,580 --> 00:26:45,510 But for the most part we're really asking you to make a 532 00:26:45,510 --> 00:26:51,290 strong commitment to the class, and so if your 533 00:26:51,290 --> 00:26:56,510 situation is such that you're unsure it's best to talk with 534 00:26:56,510 --> 00:27:03,060 us or politely decline to participate, rather than 535 00:27:03,060 --> 00:27:05,650 putting on the rosy glasses, say, "Oh yeah I think I can do 536 00:27:05,650 --> 00:27:08,680 this, even though I know that I've got a major deadline that 537 00:27:08,680 --> 00:27:11,440 conflicts with one of these projects," or whatever. 538 00:27:11,440 --> 00:27:12,640 It's just really difficult on the 539 00:27:12,640 --> 00:27:16,030 students when things change. 540 00:27:16,030 --> 00:27:20,290 They are sort of going I don't know if you remember what it's 541 00:27:20,290 --> 00:27:23,230 like being in school as an undergraduate, but pretty much 542 00:27:23,230 --> 00:27:26,750 the students go sort of hand to mouth, in terms of like, 543 00:27:26,750 --> 00:27:29,300 they look and they say, OK I got this deadline this week I 544 00:27:29,300 --> 00:27:31,150 better work on that one. 545 00:27:31,150 --> 00:27:33,800 They don't really look ahead and so forth, and so it's up 546 00:27:33,800 --> 00:27:37,730 to us, to some extent, to recognize that they're in that 547 00:27:37,730 --> 00:27:41,010 mode and that we need to do things to make 548 00:27:41,010 --> 00:27:42,210 that easy for them. 549 00:27:42,210 --> 00:27:47,110 When they get sick or something mid-term it can 550 00:27:47,110 --> 00:27:50,410 really throw a student way off for the term, and so certainly 551 00:27:50,410 --> 00:27:58,100 when something happens to the staff, that sort of, at that 552 00:27:58,100 --> 00:28:06,435 caliber, can really knock them off their trajectory. 553 00:28:06,435 --> 00:28:09,140 554 00:28:09,140 --> 00:28:13,260 The design and code reviews should normally be held at 555 00:28:13,260 --> 00:28:18,385 MIT, and the students will have some locations. 556 00:28:18,385 --> 00:28:22,510 557 00:28:22,510 --> 00:28:26,660 If you are within walking distance to campus however, 558 00:28:26,660 --> 00:28:29,750 you may suggest an alternative place to meet, such as at your 559 00:28:29,750 --> 00:28:32,620 own workplace, if that's more convenient for you, OK? 560 00:28:32,620 --> 00:28:36,210 But if a student balks at doing that you shouldn't 561 00:28:36,210 --> 00:28:39,890 pressure them to accept. 562 00:28:39,890 --> 00:28:43,650 The content of the off campus meetings should be 563 00:28:43,650 --> 00:28:47,250 professional, it's strictly the review process, no lab 564 00:28:47,250 --> 00:28:53,680 tours, no free lunches, or dinners, or what have you, OK? 565 00:28:53,680 --> 00:28:56,860 And we'll talk a little bit more about that later. 566 00:28:56,860 --> 00:28:59,240 But the main thing about them is that they can be scheduled 567 00:28:59,240 --> 00:29:03,440 in the evening or you know whatever time you and your two 568 00:29:03,440 --> 00:29:06,680 students find convenient to get together, OK? 569 00:29:06,680 --> 00:29:11,280 There's no limits as to when you know what 570 00:29:11,280 --> 00:29:11,990 time those can be. 571 00:29:11,990 --> 00:29:15,940 They can be on the weekend they can be, whatever you can 572 00:29:15,940 --> 00:29:19,030 work out, very flexible. 573 00:29:19,030 --> 00:29:22,150 So here's the basic guidelines, each master is 574 00:29:22,150 --> 00:29:23,950 responsible for reviewing the code 575 00:29:23,950 --> 00:29:25,370 produced by four students. 576 00:29:25,370 --> 00:29:28,420 577 00:29:28,420 --> 00:29:31,940 The students typically will work in teams of two or three 578 00:29:31,940 --> 00:29:34,150 for the projects, OK? 579 00:29:34,150 --> 00:29:38,590 So what you will have is your four students will be 580 00:29:38,590 --> 00:29:43,380 organized into two review groups of two students each, 581 00:29:43,380 --> 00:29:46,860 but none of the students will be on the same project. 582 00:29:46,860 --> 00:29:49,690 The reason for that is that we want to make sure that every 583 00:29:49,690 --> 00:29:53,860 student who goes to represent their project can represent 584 00:29:53,860 --> 00:29:56,790 the whole project. 585 00:29:56,790 --> 00:30:00,010 So they're responsible for the whole project. 586 00:30:00,010 --> 00:30:03,010 They don't have a buddy there on the same team, who can 587 00:30:03,010 --> 00:30:06,180 cover for them when you're asking them questions about 588 00:30:06,180 --> 00:30:06,970 their project. 589 00:30:06,970 --> 00:30:14,000 You ask them questions they've got to be able to answer about 590 00:30:14,000 --> 00:30:16,950 the whole thing, even if they didn't code 591 00:30:16,950 --> 00:30:17,810 every piece of that. 592 00:30:17,810 --> 00:30:19,830 We're encouraging them generally to do things like 593 00:30:19,830 --> 00:30:24,120 pair programming, so they really should understand 594 00:30:24,120 --> 00:30:30,500 what's going on throughout. 595 00:30:30,500 --> 00:30:33,390 The reason for having two groups, rather than meeting 596 00:30:33,390 --> 00:30:37,060 them individually, it turns out there's actually some good 597 00:30:37,060 --> 00:30:41,040 knowledge of one of them sort of being able to see what the 598 00:30:41,040 --> 00:30:42,830 other teams are doing. 599 00:30:42,830 --> 00:30:45,480 So generally they're not allowed to share their 600 00:30:45,480 --> 00:30:48,510 solutions, et cetera, with other teams, but in this 601 00:30:48,510 --> 00:30:50,400 meeting that's OK. 602 00:30:50,400 --> 00:30:53,190 The ideas and so forth can come but they shouldn't be 603 00:30:53,190 --> 00:30:55,540 making copies for each other of the code 604 00:30:55,540 --> 00:30:56,920 of the other group. 605 00:30:56,920 --> 00:30:59,730 But they can say, oh is that what the other team did, And 606 00:30:59,730 --> 00:31:03,710 so forth, and there can be some learning for them to 607 00:31:03,710 --> 00:31:04,925 submit the final project. 608 00:31:04,925 --> 00:31:07,650 SAMAN AMARASINGHE: Also last year, lot of masters very 609 00:31:07,650 --> 00:31:09,980 successfully used the other team members to kind critique 610 00:31:09,980 --> 00:31:11,370 each other. 611 00:31:11,370 --> 00:31:14,820 So showing something do you understand this, and then they 612 00:31:14,820 --> 00:31:17,140 can look at it and say, "Yeah, I can see what's going on, 613 00:31:17,140 --> 00:31:20,890 that's very useful," also when we go to masters we can talk 614 00:31:20,890 --> 00:31:22,420 about of that type of thing. 615 00:31:22,420 --> 00:31:24,550 PROFESSOR: Also things like documentation. 616 00:31:24,550 --> 00:31:28,260 You can look at the code there and ask the other one, "Do you 617 00:31:28,260 --> 00:31:31,180 understand what that documentation 618 00:31:31,180 --> 00:31:32,040 says?" And so forth. 619 00:31:32,040 --> 00:31:34,820 It turns out it's actually easier than that, because 620 00:31:34,820 --> 00:31:38,130 usually if the documentation is inadequate, the student 621 00:31:38,130 --> 00:31:39,790 himself has trouble remembering 622 00:31:39,790 --> 00:31:40,690 what they did, right? 623 00:31:40,690 --> 00:31:45,430 I mean you know how this works with code, so. 624 00:31:45,430 --> 00:31:49,120 So consequently you're responsible for generally for 625 00:31:49,120 --> 00:31:52,760 two review meetings for each of the four projects. 626 00:31:52,760 --> 00:31:55,970 Now as it turns out we'll assign things, we're going to 627 00:31:55,970 --> 00:31:58,680 have things like students dropping the class, and so 628 00:31:58,680 --> 00:32:02,150 there will be some minor reshuffling as we go on. 629 00:32:02,150 --> 00:32:05,900 Some of you may end up with only one team of two students. 630 00:32:05,900 --> 00:32:08,900 Some of you may find that you're reconstituting it. 631 00:32:08,900 --> 00:32:11,950 In some cases if we end up-- 632 00:32:11,950 --> 00:32:16,430 we may ask somebody, "Can you cover an extra team this time 633 00:32:16,430 --> 00:32:18,000 because somebody is going to be out of town?" Or 634 00:32:18,000 --> 00:32:18,830 something like that. 635 00:32:18,830 --> 00:32:21,270 So there may be some variations on this, but this 636 00:32:21,270 --> 00:32:23,600 is basically how things go. 637 00:32:23,600 --> 00:32:26,200 638 00:32:26,200 --> 00:32:29,280 Now, one thing you should understand is that you are not 639 00:32:29,280 --> 00:32:32,780 going to grade the students. 640 00:32:32,780 --> 00:32:41,410 So, one of the things I learned long ago was that when 641 00:32:41,410 --> 00:32:44,490 you grade somebody they behave differently than if you don't. 642 00:32:44,490 --> 00:32:47,030 643 00:32:47,030 --> 00:32:51,030 So you're not grading them that has a plus and a minus. 644 00:32:51,030 --> 00:32:55,610 The plus is that then this is really pure feedback for them. 645 00:32:55,610 --> 00:32:58,870 This is to help them, they know that you're supposed to 646 00:32:58,870 --> 00:32:59,360 have read it. 647 00:32:59,360 --> 00:33:03,000 The downside is some students will say, "Eh, then I don't 648 00:33:03,000 --> 00:33:06,970 need to listen, because nobody's holding a stick over 649 00:33:06,970 --> 00:33:12,860 my head." But the reason we do that is twofold. 650 00:33:12,860 --> 00:33:18,580 One is because we think that the quality of interaction is 651 00:33:18,580 --> 00:33:23,200 better, and the second reason is because you're not 652 00:33:23,200 --> 00:33:24,805 empowered by MIT to give grades. 653 00:33:24,805 --> 00:33:27,830 654 00:33:27,830 --> 00:33:30,440 So you won't be grading them. 655 00:33:30,440 --> 00:33:32,600 You're also not responsible for the technical 656 00:33:32,600 --> 00:33:34,430 content of the class. 657 00:33:34,430 --> 00:33:36,490 We're going to be teaching stuff, hopefully which is 658 00:33:36,490 --> 00:33:41,040 sufficiently new, some of it, that some of you may not know 659 00:33:41,040 --> 00:33:43,400 all of what we're teaching with respect to parallelism, 660 00:33:43,400 --> 00:33:43,960 and so forth. 661 00:33:43,960 --> 00:33:49,590 Some of you may that's great, but that's not the role. 662 00:33:49,590 --> 00:33:51,850 We will take responsibility for teaching the 663 00:33:51,850 --> 00:33:53,410 content of the class. 664 00:33:53,410 --> 00:33:57,240 What we're really after here is for you to listen as an 665 00:33:57,240 --> 00:34:02,320 experienced program developer, and provide feedback to the 666 00:34:02,320 --> 00:34:06,640 students about software engineering. 667 00:34:06,640 --> 00:34:10,040 In other words explained to them what's going on. "Why 668 00:34:10,040 --> 00:34:12,219 didn't you write that in your documentation? 669 00:34:12,219 --> 00:34:14,350 How come all your variables have only one letter? 670 00:34:14,350 --> 00:34:17,870 671 00:34:17,870 --> 00:34:20,600 Why is this stuff wrapping around three 672 00:34:20,600 --> 00:34:22,300 lines before you-- 673 00:34:22,300 --> 00:34:25,580 why no white space?" This kind of stuff. 674 00:34:25,580 --> 00:34:30,830 So, remember they're very smart students, but they're 675 00:34:30,830 --> 00:34:32,909 also very immature many of them. 676 00:34:32,909 --> 00:34:37,690 Some of them you'll discover are like way mature, but 677 00:34:37,690 --> 00:34:39,969 there's going to be some of them that are just absolutely 678 00:34:39,969 --> 00:34:42,500 this is new to them, and what they need is some 679 00:34:42,500 --> 00:34:45,550 encouragement and some suggestions as to what they 680 00:34:45,550 --> 00:34:48,739 can do to improve the quality of their code. 681 00:34:48,739 --> 00:34:53,499 And since we're not in a position to review it, why 682 00:34:53,499 --> 00:34:57,790 we're deputizing you as members of the MIT POSSE, is 683 00:34:57,790 --> 00:35:02,940 to deputize you to help them produce better quality code, 684 00:35:02,940 --> 00:35:05,500 which is not something that's easy for us either to give 685 00:35:05,500 --> 00:35:07,660 feedback on, or to grade. 686 00:35:07,660 --> 00:35:10,330 So hopefully when we are grading them in the end on 687 00:35:10,330 --> 00:35:13,900 their final submission and the quality of things, it reflects 688 00:35:13,900 --> 00:35:17,630 that they've learned something from you folks about 689 00:35:17,630 --> 00:35:18,940 producing good code. 690 00:35:18,940 --> 00:35:23,290 691 00:35:23,290 --> 00:35:28,820 Also you want to be careful, this is one of the bugs I have 692 00:35:28,820 --> 00:35:31,950 when I interact with the students is, I tend to do most 693 00:35:31,950 --> 00:35:35,970 of the talking if I don't check myself. 694 00:35:35,970 --> 00:35:39,860 And one of the really good things is to have a guideline 695 00:35:39,860 --> 00:35:44,510 that they I don't know how many of you have teenage kids, 696 00:35:44,510 --> 00:35:53,240 and if you lecture them how quickly they learn right? 697 00:35:53,240 --> 00:35:54,840 No, they don't. 698 00:35:54,840 --> 00:35:58,650 So the goal here is to help them learn. 699 00:35:58,650 --> 00:36:01,860 And so lecturing usually doesn't work. 700 00:36:01,860 --> 00:36:03,850 What works generally is getting 701 00:36:03,850 --> 00:36:05,690 them to do the talking. 702 00:36:05,690 --> 00:36:08,110 And then it's great to pepper your 703 00:36:08,110 --> 00:36:11,470 interactions with anecdotes. 704 00:36:11,470 --> 00:36:14,530 I work with one person who did this, or early in my career I 705 00:36:14,530 --> 00:36:18,070 did this and here's how it blew up in my face, 706 00:36:18,070 --> 00:36:18,900 that kind of thing. 707 00:36:18,900 --> 00:36:23,370 Excellent to have anecdotes that you can give with real 708 00:36:23,370 --> 00:36:25,390 world experience. 709 00:36:25,390 --> 00:36:30,320 Why you might think it's like this, but in fact, if you do 710 00:36:30,320 --> 00:36:34,330 it that way you're headed down a very bad path. 711 00:36:34,330 --> 00:36:35,660 Let me tell you story about that. 712 00:36:35,660 --> 00:36:36,780 That's fine, OK. 713 00:36:36,780 --> 00:36:38,780 SAMAN AMARASINGHE: Or if you find a very stubborn person 714 00:36:38,780 --> 00:36:41,040 saying, "If you do that I won't hire you." 715 00:36:41,040 --> 00:36:43,460 PROFESSOR: That counts too. 716 00:36:43,460 --> 00:36:48,320 You would never get a job here if you coded like that. 717 00:36:48,320 --> 00:36:51,170 And in fact that's actually what Saman says, that's 718 00:36:51,170 --> 00:36:54,080 actually one of the big benefits of having folks from 719 00:36:54,080 --> 00:36:57,860 industry providing that feedback, because we can say 720 00:36:57,860 --> 00:37:03,430 that, if you do it like that you wouldn't be hired by XYZ 721 00:37:03,430 --> 00:37:04,640 corporation. 722 00:37:04,640 --> 00:37:08,330 You can say that, but if you say, I wouldn't hire you, if 723 00:37:08,330 --> 00:37:13,930 you did that, that has a, it's like, oh! 724 00:37:13,930 --> 00:37:16,250 It has a big impact, whereas when we do it it's 725 00:37:16,250 --> 00:37:17,790 like eh, you know. 726 00:37:17,790 --> 00:37:20,120 It's like what do they know? 727 00:37:20,120 --> 00:37:23,630 728 00:37:23,630 --> 00:37:27,130 So the guideline is make them do a lot of the talking, so 729 00:37:27,130 --> 00:37:29,970 that they're trying to explain and you teach them a little 730 00:37:29,970 --> 00:37:31,820 bit what a design and code review is. 731 00:37:31,820 --> 00:37:34,310 Now, in fact what your review is, is both 732 00:37:34,310 --> 00:37:36,112 design and code review. 733 00:37:36,112 --> 00:37:38,725 SAMAN AMARASINGHE: To add to that, what we have told them 734 00:37:38,725 --> 00:37:42,320 is to prepare for what a filing statement type thing, 735 00:37:42,320 --> 00:37:45,540 to walk through and explain what they did to you guys. 736 00:37:45,540 --> 00:37:48,140 So they will come with some preparations stuff that they 737 00:37:48,140 --> 00:37:52,210 can do that, let them, both of them kind of do that, and then 738 00:37:52,210 --> 00:37:56,510 start them off the instructive part. 739 00:37:56,510 --> 00:37:57,760 PROFESSOR: And maybe they'll do that. 740 00:37:57,760 --> 00:38:00,820 741 00:38:00,820 --> 00:38:03,170 But that's the goal is, you should say, "Look, when you 742 00:38:03,170 --> 00:38:07,090 come you should prepare something that brings me up to 743 00:38:07,090 --> 00:38:09,080 speed," and teach them a little bit about what's 744 00:38:09,080 --> 00:38:12,720 expected of them when you have a design or 745 00:38:12,720 --> 00:38:15,840 code review in industry. 746 00:38:15,840 --> 00:38:18,020 So for each of the projects, as we mentioned, there will be 747 00:38:18,020 --> 00:38:21,690 a short information session, typically by dialing 748 00:38:21,690 --> 00:38:23,580 conferencing, except for this one, which 749 00:38:23,580 --> 00:38:24,840 we'll do in a minute. 750 00:38:24,840 --> 00:38:28,860 After the students have submitted their beta releases 751 00:38:28,860 --> 00:38:32,670 we will get the code to you. 752 00:38:32,670 --> 00:38:35,030 Last year we had the students responsible for getting the 753 00:38:35,030 --> 00:38:40,980 code to the MIT POSSE, and that was basically a nightmare 754 00:38:40,980 --> 00:38:43,270 for everybody involved. 755 00:38:43,270 --> 00:38:47,970 So this time we will make sure that we get you their code, 756 00:38:47,970 --> 00:38:51,580 and I hope that way the unreliability-- 757 00:38:51,580 --> 00:38:54,020 I don't know if you remember but like, these are mostly 758 00:38:54,020 --> 00:38:57,100 like juniors and seniors, and when you're juniors and 759 00:38:57,100 --> 00:39:00,530 seniors you're not 100% reliable in everything you do 760 00:39:00,530 --> 00:39:04,990 and your word is your bond is not necessarily, oh I forgot 761 00:39:04,990 --> 00:39:07,260 that my word is my bond, kind of thing, right? 762 00:39:07,260 --> 00:39:12,610 763 00:39:12,610 --> 00:39:16,400 So by us getting it to you, we'll remove one layer 764 00:39:16,400 --> 00:39:20,270 hopefully of flakiness. 765 00:39:20,270 --> 00:39:22,540 Next what you'll do is, you'll coordinate to meet with a 766 00:39:22,540 --> 00:39:26,190 mutually agreeable time, and then after the review you're 767 00:39:26,190 --> 00:39:28,430 going to provide us with a little bit of feed back, it 768 00:39:28,430 --> 00:39:33,560 doesn't have to be long, just a short email, not as a grade 769 00:39:33,560 --> 00:39:37,760 or evaluation, but to help us understand where the student's 770 00:39:37,760 --> 00:39:39,630 are doing well, and what they're missing. 771 00:39:39,630 --> 00:39:43,090 So what we may need to stress in class and so forth. 772 00:39:43,090 --> 00:39:45,340 And then, of course, after the review, they have the 773 00:39:45,340 --> 00:39:50,320 opportunity to make changes to their code before they submit 774 00:39:50,320 --> 00:39:52,100 their final revision. 775 00:39:52,100 --> 00:39:53,920 Now, that's a little bit different from industry where 776 00:39:53,920 --> 00:39:57,025 you would go through typically some kind of feature freeze, 777 00:39:57,025 --> 00:39:59,340 and code freeze, and so forth. 778 00:39:59,340 --> 00:40:04,070 Our beta is beta sort of in name, but not necessarily in 779 00:40:04,070 --> 00:40:07,190 all aspects, in that they can actually completely rewrite 780 00:40:07,190 --> 00:40:12,196 their code between the beta and the final version. 781 00:40:12,196 --> 00:40:15,240 SAMAN AMARASINGHE: So in your feedback you can also tell a 782 00:40:15,240 --> 00:40:17,410 little bit about in your interactions what worked and 783 00:40:17,410 --> 00:40:18,040 what didn't. 784 00:40:18,040 --> 00:40:20,510 This is the first time, as far as we know anybody's doing 785 00:40:20,510 --> 00:40:23,580 this kind of a thing anywhere. 786 00:40:23,580 --> 00:40:25,790 We are also developing a process so 787 00:40:25,790 --> 00:40:27,340 good practice is very-- 788 00:40:27,340 --> 00:40:30,020 PROFESSOR: And since your email will go to MIT POSSE and 789 00:40:30,020 --> 00:40:35,690 everybody will read it, what hopefully you can do is, some 790 00:40:35,690 --> 00:40:38,390 of the practices that you find useful, I tried this at work, 791 00:40:38,390 --> 00:40:40,100 I tried this, it didn't work. 792 00:40:40,100 --> 00:40:43,360 That starts to get spread out among you and is becomes very 793 00:40:43,360 --> 00:40:47,360 helpful for each other to say, "Oh, well that was an 794 00:40:47,360 --> 00:40:50,660 interesting idea let me try that." And so we hopefully 795 00:40:50,660 --> 00:40:53,933 we'll be able then to start compiling some best practices. 796 00:40:53,933 --> 00:40:56,520 AUDIENCE: Will we be identifying students by name 797 00:40:56,520 --> 00:40:57,888 in those broadcasting minutes? 798 00:40:57,888 --> 00:41:01,940 PROFESSOR: Yes, yes, in fact here's the thing is, what 799 00:41:01,940 --> 00:41:04,860 you're going to do is give, well it one, names the 800 00:41:04,860 --> 00:41:07,860 students who attended, and that helps us keep track of 801 00:41:07,860 --> 00:41:11,270 who's actually going to these and who isn't. 802 00:41:11,270 --> 00:41:14,330 The strengths and weaknesses in the student presentations. 803 00:41:14,330 --> 00:41:16,360 Some suggestions for improving the assignment. 804 00:41:16,360 --> 00:41:19,110 That's suggestions for us to improve the assignment for 805 00:41:19,110 --> 00:41:23,690 them, and any other comments. 806 00:41:23,690 --> 00:41:26,400 So we got some really good feedback last year that, "Hey 807 00:41:26,400 --> 00:41:31,310 the code you're handing out as the initial code that was 808 00:41:31,310 --> 00:41:35,940 really sloppily documented." Last year we were much more 809 00:41:35,940 --> 00:41:38,010 behind the eight-ball in terms of trying to do this. 810 00:41:38,010 --> 00:41:40,990 This time we've had more time, and in particular we also have 811 00:41:40,990 --> 00:41:43,790 some really outstanding TAs who've worked very hard on the 812 00:41:43,790 --> 00:41:45,290 software engineering of the project. 813 00:41:45,290 --> 00:41:47,730 So I think that we'll be better in that regard, this 814 00:41:47,730 --> 00:41:49,242 year, than we were last year. 815 00:41:49,242 --> 00:41:50,540 AUDIENCE: I just had a question 816 00:41:50,540 --> 00:41:52,210 PROFESSOR: Yeah, sure. 817 00:41:52,210 --> 00:41:54,880 AUDIENCE: You mentioned that they're going to give to you 818 00:41:54,880 --> 00:41:56,190 and you're going to pass the code out. 819 00:41:56,190 --> 00:41:56,495 PROFESSOR: Yes. 820 00:41:56,495 --> 00:41:59,246 AUDIENCE: Do you mean just the code or are you thinking 821 00:41:59,246 --> 00:42:02,226 structured more as a design review, they really will be 822 00:42:02,226 --> 00:42:05,022 talking about, a review package. 823 00:42:05,022 --> 00:42:07,260 It would be the code plus I don't know whether you're 824 00:42:07,260 --> 00:42:12,490 doing documentation generation or any sort of an intro or 825 00:42:12,490 --> 00:42:12,990 front matter? 826 00:42:12,990 --> 00:42:15,440 PROFESSOR: Yeah, so the question is whether in 827 00:42:15,440 --> 00:42:17,770 addition to the code there should there's going to be any 828 00:42:17,770 --> 00:42:21,190 other documentation, or package, or whatever. 829 00:42:21,190 --> 00:42:24,110 In fact, most of the final documentation is going to be 830 00:42:24,110 --> 00:42:28,350 for the final project and not for the beta, and so they 831 00:42:28,350 --> 00:42:31,270 should have things well documented within the code, 832 00:42:31,270 --> 00:42:34,090 for example about what their strategies are, and how they 833 00:42:34,090 --> 00:42:38,420 work, and so forth, but there won't generally be a write up. 834 00:42:38,420 --> 00:42:43,240 They should be providing you at your meeting with a brief 835 00:42:43,240 --> 00:42:46,030 outline of what's going on, and you can ask them after the 836 00:42:46,030 --> 00:42:49,170 first meeting for any other thing that you think would be 837 00:42:49,170 --> 00:42:53,300 helpful to them and to you in making the design meeting more 838 00:42:53,300 --> 00:42:54,960 productive. 839 00:42:54,960 --> 00:42:57,260 One of the things always in these things is how much do 840 00:42:57,260 --> 00:43:04,600 you require out of the students and at which time. 841 00:43:04,600 --> 00:43:09,110 They have in this project, we're on a relentless series 842 00:43:09,110 --> 00:43:10,520 of deadlines for them. 843 00:43:10,520 --> 00:43:13,850 And so we've tried to do as much as we can while being 844 00:43:13,850 --> 00:43:17,520 still relatively minimalistic in asking for too 845 00:43:17,520 --> 00:43:19,220 much stuff too early. 846 00:43:19,220 --> 00:43:22,020 And so it would be great if they had a complete package of 847 00:43:22,020 --> 00:43:25,180 here's what's going on, the fact is that they were up 848 00:43:25,180 --> 00:43:27,930 really late the night before trying to get this stuff done, 849 00:43:27,930 --> 00:43:32,400 they've also had to submit beta tests and so we decided 850 00:43:32,400 --> 00:43:35,310 that the final write up of how their project worked, et 851 00:43:35,310 --> 00:43:38,670 cetera, we would save for the final, and it won't be 852 00:43:38,670 --> 00:43:43,680 something, in English written like that will only be in the 853 00:43:43,680 --> 00:43:47,970 code, it won't be as a separate package. 854 00:43:47,970 --> 00:43:49,220 AUDIENCE: Right. 855 00:43:49,220 --> 00:43:51,450 856 00:43:51,450 --> 00:43:54,260 PROFESSOR: Any other questions about that? 857 00:43:54,260 --> 00:43:59,245 OK, so one final word, relationships with students. 858 00:43:59,245 --> 00:44:03,480 859 00:44:03,480 --> 00:44:07,590 So one of the things that MIT has, and many other places 860 00:44:07,590 --> 00:44:09,140 have, I'm sure that you're aware, that if you're in a 861 00:44:09,140 --> 00:44:11,940 power position with somebody, and this in particular applies 862 00:44:11,940 --> 00:44:16,000 at MIT with students, you must ensure that all your 863 00:44:16,000 --> 00:44:19,560 relationships are strictly educational. 864 00:44:19,560 --> 00:44:26,540 And what that means is like a, no romance, OK, duh. 865 00:44:26,540 --> 00:44:30,295 But it also means in this context, no recruiting, hints 866 00:44:30,295 --> 00:44:34,010 at job opportunities, offers of summer internships, lab 867 00:44:34,010 --> 00:44:37,540 tours, et cetera, free dinners, and so forth. 868 00:44:37,540 --> 00:44:40,420 Your job has to be completely educational. 869 00:44:40,420 --> 00:44:47,310 However when the term is over you're welcome to continue 870 00:44:47,310 --> 00:44:51,720 your friendship in a non-power relationship. 871 00:44:51,720 --> 00:44:55,810 There's no longer a power relationship you're welcome to 872 00:44:55,810 --> 00:44:58,790 start a romance with one of the students if you will, but 873 00:44:58,790 --> 00:45:03,450 in particular, allowed to seduce them to come to your 874 00:45:03,450 --> 00:45:10,320 company as a summer intern, or a job or what have you. 875 00:45:10,320 --> 00:45:16,360 So you're welcome to do that but not during the term, those 876 00:45:16,360 --> 00:45:18,830 sorts of things are absolutely off bounds. 877 00:45:18,830 --> 00:45:21,890 Now the students themselves may say, "Hey do you guys have 878 00:45:21,890 --> 00:45:24,890 summer internships, and so forth?" And it's up to you 879 00:45:24,890 --> 00:45:32,110 folks to draw the line and say something like, "Yes, we do, 880 00:45:32,110 --> 00:45:36,110 but if you're interested in that, we can talk about that 881 00:45:36,110 --> 00:45:39,060 after the term is over," for example. 882 00:45:39,060 --> 00:45:43,310 So, put them off in some way, and return the conversation to 883 00:45:43,310 --> 00:45:45,830 the educational mission for the term. 884 00:45:45,830 --> 00:45:46,566 Yeah? 885 00:45:46,566 --> 00:45:50,454 AUDIENCE: So what if the students do a good job? 886 00:45:50,454 --> 00:45:55,320 887 00:45:55,320 --> 00:45:58,340 PROFESSOR: Yes, but then you run the risk of it being 888 00:45:58,340 --> 00:46:04,300 interpreted as a quid pro quo for employment, which is 889 00:46:04,300 --> 00:46:10,820 exactly the thing that we're trying to steer away from. 890 00:46:10,820 --> 00:46:13,950 They're smart MIT students, I think they'll figure out that 891 00:46:13,950 --> 00:46:16,850 if they're interested in a summer internship they should 892 00:46:16,850 --> 00:46:18,020 be impressing their mentor. 893 00:46:18,020 --> 00:46:22,065 Not all of them figure this out, by the way. 894 00:46:22,065 --> 00:46:23,518 AUDIENCE: So just to clarify. 895 00:46:23,518 --> 00:46:26,871 Just to clarify, it's okay to say, "If you write your code 896 00:46:26,871 --> 00:46:29,745 this way, I won't hire you." But it's not OK to say, "I 897 00:46:29,745 --> 00:46:33,580 wouldn't hire you." I just want to clarify. 898 00:46:33,580 --> 00:46:35,350 PROFESSOR: You'd say I wouldn't hire you, OK, my 899 00:46:35,350 --> 00:46:37,240 company would not hire somebody who wrote 900 00:46:37,240 --> 00:46:38,290 their code like this. 901 00:46:38,290 --> 00:46:39,220 You could say that. 902 00:46:39,220 --> 00:46:41,240 AUDIENCE: But it's not okay to say my company looks for 903 00:46:41,240 --> 00:46:44,920 people who would write code this way? 904 00:46:44,920 --> 00:46:47,370 PROFESSOR: No, I think that would be OK too. 905 00:46:47,370 --> 00:46:52,010 No, the issue is whether you personalize it, right? 906 00:46:52,010 --> 00:46:56,190 If you're interested in a summer job, I can get you a 907 00:46:56,190 --> 00:47:00,490 summer job, all you have to do is, dadadadadadadaaa, and now 908 00:47:00,490 --> 00:47:03,470 they feel like there's another master to serve. 909 00:47:03,470 --> 00:47:07,110 So what we want to avoid is having them feel like there's 910 00:47:07,110 --> 00:47:10,550 another obligation on top of the obligation 911 00:47:10,550 --> 00:47:12,020 they have to the class. 912 00:47:12,020 --> 00:47:16,120 They should not feel that in some ways they're obliged to 913 00:47:16,120 --> 00:47:20,080 do something for you in order, for example, to get a job. 914 00:47:20,080 --> 00:47:20,840 SAMAN AMARASINGHE: Or get a good grade. 915 00:47:20,840 --> 00:47:22,900 PROFESSOR: Or get a good grade, or-- 916 00:47:22,900 --> 00:47:25,562 SAMAN AMARASINGHE: If I say no to the summer job they're 917 00:47:25,562 --> 00:47:28,708 going to badmouth me and I will fail this class or get a 918 00:47:28,708 --> 00:47:29,676 bad grade, and then. 919 00:47:29,676 --> 00:47:33,420 So, that put them in a binding situation that they won't work 920 00:47:33,420 --> 00:47:34,955 for the class, but they'll feel obliged 921 00:47:34,955 --> 00:47:35,900 to something else. 922 00:47:35,900 --> 00:47:39,780 PROFESSOR: You're in a power situation, and you're in a 923 00:47:39,780 --> 00:47:43,250 situation where you must not let them have any sense that 924 00:47:43,250 --> 00:47:46,560 there's any power relationship there, if you 925 00:47:46,560 --> 00:47:47,450 will, in other words-- 926 00:47:47,450 --> 00:47:49,390 AUDIENCE: We shouldn't try to extort meals from them. 927 00:47:49,390 --> 00:47:52,300 PROFESSOR: For example. 928 00:47:52,300 --> 00:47:53,755 Exactly, exactly. 929 00:47:53,755 --> 00:47:59,960 930 00:47:59,960 --> 00:48:02,890 Also if you feel anything awkward is developing, let 931 00:48:02,890 --> 00:48:06,340 Saman, or me, this is something for which the staff 932 00:48:06,340 --> 00:48:11,330 only email is better than probably the MIT POSSE one. 933 00:48:11,330 --> 00:48:12,910 SAMAN AMARASINGHE: Or even to us directly. 934 00:48:12,910 --> 00:48:15,690 PROFESSOR: Or even to us directly, although I actually 935 00:48:15,690 --> 00:48:18,600 think it better to go via the staff only. 936 00:48:18,600 --> 00:48:20,700 It really is much better to go get via staff only, because 937 00:48:20,700 --> 00:48:23,830 the TAs need to know what's going on with all the students 938 00:48:23,830 --> 00:48:25,180 in class as well. 939 00:48:25,180 --> 00:48:26,365 Question back here. 940 00:48:26,365 --> 00:48:28,457 AUDIENCE: Two logistical questions but I don't want to 941 00:48:28,457 --> 00:48:29,620 interrupt you before you finish. 942 00:48:29,620 --> 00:48:30,550 PROFESSOR: No, that's fine. 943 00:48:30,550 --> 00:48:33,130 AUDIENCE: Okay, it's not clear to me do we meet with the same 944 00:48:33,130 --> 00:48:35,080 four students throughout the term? 945 00:48:35,080 --> 00:48:36,320 PROFESSOR: If possible we will do that. 946 00:48:36,320 --> 00:48:40,210 Because otherwise what happens is, they hear it from one and 947 00:48:40,210 --> 00:48:42,000 then they go to another. 948 00:48:42,000 --> 00:48:45,150 So this way there's some amount of continuity, but that 949 00:48:45,150 --> 00:48:48,200 won't happen perfectly because students will drop and we'll 950 00:48:48,200 --> 00:48:50,890 have to reconstitute groups and things. 951 00:48:50,890 --> 00:48:53,365 GUEST SPEAKER: The winners get David and the losers get me. 952 00:48:53,365 --> 00:48:53,860 That's OK. 953 00:48:53,860 --> 00:48:55,850 I just wanted to be clear. 954 00:48:55,850 --> 00:49:00,156 Also you e-mail the code to us before we do 955 00:49:00,156 --> 00:49:01,120 the sit down session? 956 00:49:01,120 --> 00:49:01,602 PROFESSOR: Yes. 957 00:49:01,602 --> 00:49:03,530 GUEST SPEAKER: Are we expected to review it by ourselves 958 00:49:03,530 --> 00:49:04,494 beforehand? 959 00:49:04,494 --> 00:49:07,386 PROFESSOR: I think it helps to take a look at it, yes. 960 00:49:07,386 --> 00:49:09,314 GUEST SPEAKER: As opposed to walk in cold 961 00:49:09,314 --> 00:49:10,290 and doing just that. 962 00:49:10,290 --> 00:49:12,790 PROFESSOR: Yeah, yes, that's right, I mean I think you do a 963 00:49:12,790 --> 00:49:16,280 better job if you have looked at the code beforehand to see, 964 00:49:16,280 --> 00:49:19,550 oh my goodness this is, and take a few notes. 965 00:49:19,550 --> 00:49:22,330 966 00:49:22,330 --> 00:49:25,380 But for this we're relying on you to use your best judgment 967 00:49:25,380 --> 00:49:26,600 for what's the best way of giving 968 00:49:26,600 --> 00:49:27,630 feedback to the students. 969 00:49:27,630 --> 00:49:30,400 But I think generally the reason we email it to you in 970 00:49:30,400 --> 00:49:34,900 advance is specifically so you have a chance to look it over. 971 00:49:34,900 --> 00:49:39,210 Once again we're not so concerned about whether the 972 00:49:39,210 --> 00:49:43,290 content of what they're learning in it as much as-- 973 00:49:43,290 --> 00:49:46,860 you look at it, it will take you two seconds as soon as you 974 00:49:46,860 --> 00:49:49,630 see one piece of undergraduate code, it'll take you two 975 00:49:49,630 --> 00:49:54,660 seconds to say, I don't care what this thing does this 976 00:49:54,660 --> 00:50:00,050 student needs to learn X. I mean you will see. 977 00:50:00,050 --> 00:50:02,400 Is that the feedback, from people who took this-- 978 00:50:02,400 --> 00:50:04,990 AUDIENCE: You'll know it when you see it. 979 00:50:04,990 --> 00:50:06,750 PROFESSOR: Any other comments from people 980 00:50:06,750 --> 00:50:08,260 from last year what-- 981 00:50:08,260 --> 00:50:10,950 AUDIENCE: Yeah, a couple comments. 982 00:50:10,950 --> 00:50:17,360 One very minor sort of procedural things. 983 00:50:17,360 --> 00:50:20,650 Personally, I found it a lot more useful to me to show up 984 00:50:20,650 --> 00:50:23,218 in person for the information sessions than do it by 985 00:50:23,218 --> 00:50:26,440 conference call, if for no other reason then a lot of 986 00:50:26,440 --> 00:50:29,526 people who called in had issues with voice quality. 987 00:50:29,526 --> 00:50:31,960 You know, just getting a good quality voice 988 00:50:31,960 --> 00:50:33,210 signal over the phone. 989 00:50:33,210 --> 00:50:35,250 990 00:50:35,250 --> 00:50:38,570 Also I found it very helpful to have each student review 991 00:50:38,570 --> 00:50:39,280 the other one's code. 992 00:50:39,280 --> 00:50:42,289 So I would just do that to start with, just hand it to 993 00:50:42,289 --> 00:50:44,500 each other and here, what do you think? 994 00:50:44,500 --> 00:50:48,485 That also gives them some experience of actually doing a 995 00:50:48,485 --> 00:50:51,630 review, as well as being the person who's 996 00:50:51,630 --> 00:50:54,620 work is being reviewed. 997 00:50:54,620 --> 00:50:58,340 PROFESSOR: That's a great technique just because one of 998 00:50:58,340 --> 00:51:00,530 the things that you want them to do is empathize with the 999 00:51:00,530 --> 00:51:05,260 person who's going to read the code, and so, by putting them 1000 00:51:05,260 --> 00:51:07,350 in the situation where they have to read somebody else's 1001 00:51:07,350 --> 00:51:13,440 code they very quickly learn oh, this is, my goodness 1002 00:51:13,440 --> 00:51:16,700 that's exactly what I did to the other one, so that is a 1003 00:51:16,700 --> 00:51:17,950 great technique. 1004 00:51:17,950 --> 00:51:20,990 1005 00:51:20,990 --> 00:51:22,458 AUDIENCE: The reference implementations are we going 1006 00:51:22,458 --> 00:51:23,700 to get those-- 1007 00:51:23,700 --> 00:51:24,220 PROFESSOR: Yes. 1008 00:51:24,220 --> 00:51:24,980 AUDIENCE: Soon? 1009 00:51:24,980 --> 00:51:25,280 Early? 1010 00:51:25,280 --> 00:51:27,620 PROFESSOR: Yes, those generally we will be able to 1011 00:51:27,620 --> 00:51:32,460 give you the reference implementations at the 1012 00:51:32,460 --> 00:51:34,720 information session. 1013 00:51:34,720 --> 00:51:36,730 Or actually, we should probably get it to them before 1014 00:51:36,730 --> 00:51:37,650 the information session. 1015 00:51:37,650 --> 00:51:38,860 AUDIENCE: I would suggest before the-- 1016 00:51:38,860 --> 00:51:40,670 PROFESSOR: Yeah, let's get those make sure we get those 1017 00:51:40,670 --> 00:51:42,890 to you before the information session. 1018 00:51:42,890 --> 00:51:44,850 We'll get you a reference implementation at least a few 1019 00:51:44,850 --> 00:51:45,680 days in advance. 1020 00:51:45,680 --> 00:51:49,570 AUDIENCE: OK, also something that was a recurring issue 1021 00:51:49,570 --> 00:51:51,890 last year regarding the reference supplementations 1022 00:51:51,890 --> 00:51:53,140 which was the... 1023 00:51:53,140 --> 00:51:55,510 1024 00:51:55,510 --> 00:51:56,840 there was some issues with some of the reference 1025 00:51:56,840 --> 00:51:57,135 implementation-- 1026 00:51:57,135 --> 00:51:57,430 [INTERPOSING VOICES] 1027 00:51:57,430 --> 00:51:59,300 SAMAN AMARASINGHE: --software engineering. 1028 00:51:59,300 --> 00:52:03,290 AUDIENCE: In particular things like functions that should 1029 00:52:03,290 --> 00:52:07,156 have been local to a file they were not declared static or, 1030 00:52:07,156 --> 00:52:12,060 that kind of thing, or macros that should have been used or 1031 00:52:12,060 --> 00:52:13,974 that were used and shouldn't have been. 1032 00:52:13,974 --> 00:52:17,240 1033 00:52:17,240 --> 00:52:20,060 PROFESSOR: Last year we were running with a much larger 1034 00:52:20,060 --> 00:52:23,600 class than we expected, with no infrastructure to speak of, 1035 00:52:23,600 --> 00:52:30,000 and we had two TAs who were flat out, and so we definitely 1036 00:52:30,000 --> 00:52:30,440 cut corners. 1037 00:52:30,440 --> 00:52:33,570 This year the department has been good to us, we have four 1038 00:52:33,570 --> 00:52:39,480 TAs, and so I think that the quality is going to be higher. 1039 00:52:39,480 --> 00:52:48,230 That doesn't mean that the TAs are seasoned 20 years of 1040 00:52:48,230 --> 00:52:51,510 software development experience or more, either. 1041 00:52:51,510 --> 00:52:58,990 So they have some things to learn too, but already based 1042 00:52:58,990 --> 00:53:01,940 on the first project we're ahead of the game. 1043 00:53:01,940 --> 00:53:05,060 AUDIENCE: OK, also if from time to time one of us wants 1044 00:53:05,060 --> 00:53:06,690 to attend the class? 1045 00:53:06,690 --> 00:53:08,160 PROFESSOR: Feel free to attend the class. 1046 00:53:08,160 --> 00:53:09,090 AUDIENCE: OK, where's the schedule? 1047 00:53:09,090 --> 00:53:14,590 PROFESSOR: It is Tuesdays and Thursdays in 26-100 at-- 1048 00:53:14,590 --> 00:53:15,460 AUDIENCE: Is it on the website? 1049 00:53:15,460 --> 00:53:19,690 PROFESSOR: It's on the website at 2:30 to 4:00. 1050 00:53:19,690 --> 00:53:23,840 So Tuesdays and Thursdays 2:30 to 4:00, you're welcome to 1051 00:53:23,840 --> 00:53:27,380 come and learn all about performance engineering. 1052 00:53:27,380 --> 00:53:28,290 Reed, did you have a question? 1053 00:53:28,290 --> 00:53:30,820 AUDIENCE: No, I guess I was just going to say that in 1054 00:53:30,820 --> 00:53:36,085 regard to the feedback, we TAs here have got that. 1055 00:53:36,085 --> 00:53:38,530 SAMAN AMARASINGHE: During class last week most of the 1056 00:53:38,530 --> 00:53:41,219 TAs were students last year, so they aren't learning 1057 00:53:41,219 --> 00:53:42,469 anything new. 1058 00:53:42,469 --> 00:53:44,398 1059 00:53:44,398 --> 00:53:47,670 AUDIENCE: I'm sorry, where is the class? 1060 00:53:47,670 --> 00:53:50,160 PROFESSOR: It's in 26-100 1061 00:53:50,160 --> 00:53:52,164 AUDIENCE: So it's not here? 1062 00:53:52,164 --> 00:53:54,680 PROFESSOR: No. 1063 00:53:54,680 --> 00:53:58,000 So this is the situation, we outgrew our classroom which 1064 00:53:58,000 --> 00:54:07,010 seated 60, and we had 85 or 90 students, so they put us into 1065 00:54:07,010 --> 00:54:09,700 the next smaller classroom that we would fit into. 1066 00:54:09,700 --> 00:54:18,580 That was 26-100 which fits 500. 1067 00:54:18,580 --> 00:54:24,860 Then we found that in 26-100 you needed a microphone for 1068 00:54:24,860 --> 00:54:27,550 the students to hear you, even though we had them all crowded 1069 00:54:27,550 --> 00:54:30,230 into one quarter of the auditorium, you still then-- 1070 00:54:30,230 --> 00:54:32,420 just the structure of it-- you needed a microphone, so they 1071 00:54:32,420 --> 00:54:36,620 said, "That will be $85 a lecture." And you say, "What 1072 00:54:36,620 --> 00:54:38,766 do you mean $85 a lecture?" 1073 00:54:38,766 --> 00:54:41,100 SAMAN AMARASINGHE: Someone has to walk in just to turn on-- 1074 00:54:41,100 --> 00:54:43,510 PROFESSOR: To turn on thing thing. 1075 00:54:43,510 --> 00:54:46,010 So, anyway we sorted all this out OK, but it was sort of 1076 00:54:46,010 --> 00:54:51,750 funny that you're charging us for being in a room that we 1077 00:54:51,750 --> 00:54:52,940 have no choice as to be in? 1078 00:54:52,940 --> 00:54:54,864 Anyway it was very funny. 1079 00:54:54,864 --> 00:54:57,691 AUDIENCE: Are your lectures video taped are they 1080 00:54:57,691 --> 00:54:58,290 available-- 1081 00:54:58,290 --> 00:54:59,420 PROFESSOR: They are videotaped. 1082 00:54:59,420 --> 00:55:04,350 We are not planning to put them up quick because what 1083 00:55:04,350 --> 00:55:06,860 that does is discourages students from attending the 1084 00:55:06,860 --> 00:55:11,030 lectures, as you can imagine. 1085 00:55:11,030 --> 00:55:14,800 SAMAN AMARASINGHE: Mainly for OCW OpenCourseWare So they 1086 00:55:14,800 --> 00:55:16,640 basically they could go to OpenCourseWare they will 1087 00:55:16,640 --> 00:55:18,825 process it and they have to go through a lot of legal stuff 1088 00:55:18,825 --> 00:55:20,640 and make sure the named are right. 1089 00:55:20,640 --> 00:55:22,520 PROFESSOR: Are right and so forth, yeah. 1090 00:55:22,520 --> 00:55:25,870 There is a bunch of stuff there. 1091 00:55:25,870 --> 00:55:33,160 Good, so it says final words here but they aren't really 1092 00:55:33,160 --> 00:55:34,630 final, because we still have Eric to talk 1093 00:55:34,630 --> 00:55:40,130 about the first project. 1094 00:55:40,130 --> 00:55:44,350 But the feedback from the students last year was that 1095 00:55:44,350 --> 00:55:47,480 the MIT POSSE was one thing that made this one of their 1096 00:55:47,480 --> 00:55:48,410 favorite classes. 1097 00:55:48,410 --> 00:55:53,230 It was getting that kind of seasoned feedback in a very 1098 00:55:53,230 --> 00:56:03,520 small group setting when you look at the student faculty 1099 00:56:03,520 --> 00:56:06,730 ratio, that's one thing you're always battling. 1100 00:56:06,730 --> 00:56:11,570 especially at MIT, where we are in a very popular major, 1101 00:56:11,570 --> 00:56:16,060 and so the ability to recruit all you folks to help that 1102 00:56:16,060 --> 00:56:20,400 ratio in favor of the students is really very much 1103 00:56:20,400 --> 00:56:24,590 appreciated by students and by us, so enjoy the term. 1104 00:56:24,590 --> 00:56:28,000 This is really rewarding the people who have done it before 1105 00:56:28,000 --> 00:56:31,050 we had just tremendously positive feedback from them 1106 00:56:31,050 --> 00:56:36,080 about just how rewarding it was to work with these young 1107 00:56:36,080 --> 00:56:37,172 programmers. 1108 00:56:37,172 --> 00:56:39,806 SAMAN AMARASINGHE: They are very smart people, you can see 1109 00:56:39,806 --> 00:56:41,630 the changes, you will see the you impact on them. 1110 00:56:41,630 --> 00:56:44,501 You will see you're molding these people into better 1111 00:56:44,501 --> 00:56:47,310 programmers, so that's the fun part. 1112 00:56:47,310 --> 00:56:49,280 PROFESSOR: So Eric is now going to talk a little bit 1113 00:56:49,280 --> 00:56:53,550 about project one, and this is similar to what we will do, 1114 00:56:53,550 --> 00:56:55,750 although most of you will probably be on the phone 1115 00:56:55,750 --> 00:57:01,980 unless you heed Barry's advice, for the future one. 1116 00:57:01,980 --> 00:57:04,530 So I'll get out of your way. 1117 00:57:04,530 --> 00:57:08,760 ERIC: So the project one this is, I think, the one project 1118 00:57:08,760 --> 00:57:12,980 that was substantially different from last year. 1119 00:57:12,980 --> 00:57:17,110 So, the code for this project we, the TAs, 1120 00:57:17,110 --> 00:57:18,360 coded up this semester. 1121 00:57:18,360 --> 00:57:23,020 1122 00:57:23,020 --> 00:57:27,660 Did we give out the hand outs, Saman, or Charles? 1123 00:57:27,660 --> 00:57:29,800 Yeah so these are the-- 1124 00:57:29,800 --> 00:57:39,562 PROFESSOR: So this is the actual assignment and we'll 1125 00:57:39,562 --> 00:57:40,890 share this with you, plus the reference 1126 00:57:40,890 --> 00:57:42,490 implementation, I think. 1127 00:57:42,490 --> 00:57:48,350 1128 00:57:48,350 --> 00:57:51,620 ERIC: Well we'll send out the reference implementation 1129 00:57:51,620 --> 00:57:52,870 tonight then. 1130 00:57:52,870 --> 00:57:55,100 1131 00:57:55,100 --> 00:57:58,870 In fact, now people have already done their betas for 1132 00:57:58,870 --> 00:58:01,580 project one. 1133 00:58:01,580 --> 00:58:06,480 Project one has two parts, it's a part called Every Bit 1134 00:58:06,480 --> 00:58:09,890 Counts and a part called Tiling a Torus with 1135 00:58:09,890 --> 00:58:11,140 Pentominoes. 1136 00:58:11,140 --> 00:58:12,950 1137 00:58:12,950 --> 00:58:24,590 So the first part it's an abstract data types of 1138 00:58:24,590 --> 00:58:30,100 modeling and bit array, packed bit array and they are a given 1139 00:58:30,100 --> 00:58:33,990 a couple of tasks to do on long strings of bits. 1140 00:58:33,990 --> 00:58:37,330 So you might have eight million bits and there are two 1141 00:58:37,330 --> 00:58:41,890 functions to rotate the substring of the bits by some 1142 00:58:41,890 --> 00:58:45,940 amount to the left or right, and the other operation is to 1143 00:58:45,940 --> 00:58:48,910 count how many flipped bits there 1144 00:58:48,910 --> 00:58:50,710 are in a given substring. 1145 00:58:50,710 --> 00:58:56,040 So the specific interface for this, this an excerpt without 1146 00:58:56,040 --> 00:59:01,915 the comments from the header file of this C module. 1147 00:59:01,915 --> 00:59:05,220 1148 00:59:05,220 --> 00:59:09,730 There is a couple of accessors which accesses bits 1149 00:59:09,730 --> 00:59:15,700 individually those are not, well those accessors are 1150 00:59:15,700 --> 00:59:18,540 currently used to implement, in the reference 1151 00:59:18,540 --> 00:59:26,070 implementation, the rotate and count flips operations. 1152 00:59:26,070 --> 00:59:32,110 So what they will need to do is to go into the C module, 1153 00:59:32,110 --> 00:59:38,800 the implementation, and change these functions, to basically 1154 00:59:38,800 --> 00:59:41,980 be 10,000 times faster, or whatever, I can't remember 1155 00:59:41,980 --> 00:59:43,380 what they actually got. 1156 00:59:43,380 --> 00:59:46,730 In particular the rotate operation is incredibly slow, 1157 00:59:46,730 --> 00:59:49,040 there's one constraint for them and we're saying that, 1158 00:59:49,040 --> 00:59:52,090 well imagine that this is on the cell phone or something, 1159 00:59:52,090 --> 00:59:57,520 where you have a really big bit array, but you don't 1160 00:59:57,520 --> 01:00:03,060 really have very much more memory to consume beyond that 1161 01:00:03,060 --> 01:00:03,990 big bit array. 1162 01:00:03,990 --> 01:00:08,420 So we're asking them to only do this using a constant 1163 01:00:08,420 --> 01:00:11,700 amount of memory. 1164 01:00:11,700 --> 01:00:15,270 So that's the first problem with these two parts, the 1165 01:00:15,270 --> 01:00:18,500 rotate and the count flips. 1166 01:00:18,500 --> 01:00:23,010 Any problem, questions about that particular part? 1167 01:00:23,010 --> 01:00:25,836 Does it seem clear what? 1168 01:00:25,836 --> 01:00:27,410 AUDIENCE: What does the count flips do? 1169 01:00:27,410 --> 01:00:30,980 ERIC: Oh yeah, so I should've swap those two slides. 1170 01:00:30,980 --> 01:00:34,740 So, if you have a bit string, suppose nine bits or 1171 01:00:34,740 --> 01:00:38,470 something, 1, 2, 3, 4, 5, 6, 7, 8, that would have to be 8. 1172 01:00:38,470 --> 01:00:43,780 1173 01:00:43,780 --> 01:00:48,110 If this is the substring you want to count, then you count 1174 01:00:48,110 --> 01:00:54,090 transitions from zero to one, or one to zero. 1175 01:00:54,090 --> 01:00:58,790 And there's some new tricks you can do by for instance, 1176 01:00:58,790 --> 01:00:59,550 considering six-- 1177 01:00:59,550 --> 01:01:04,230 AUDIENCE: Count the number of runs, of consecutive value. 1178 01:01:04,230 --> 01:01:06,622 ERIC: Yeah, the number of runs. 1179 01:01:06,622 --> 01:01:07,945 AUDIENCE: Plus plus one-- 1180 01:01:07,945 --> 01:01:09,270 or minus one, yeah. 1181 01:01:09,270 --> 01:01:10,660 ERIC: That's right. 1182 01:01:10,660 --> 01:01:13,280 And you don't count the beginning or the end as a 1183 01:01:13,280 --> 01:01:17,160 transition, so in this particular substring there is 1184 01:01:17,160 --> 01:01:20,130 one there, one there, and one there. 1185 01:01:20,130 --> 01:01:22,670 And it's not a substrings, it's always substrings, it's 1186 01:01:22,670 --> 01:01:28,940 not the entire string, and you can see that for instance, you 1187 01:01:28,940 --> 01:01:32,260 give us an argument, the bit array and you say where the 1188 01:01:32,260 --> 01:01:39,580 starting offset and the number of bits that the substring 1189 01:01:39,580 --> 01:01:41,400 that the substring is and that's where the 1190 01:01:41,400 --> 01:01:42,300 operation is done. 1191 01:01:42,300 --> 01:01:47,100 So our testing routines will do lots of rotations in 1192 01:01:47,100 --> 01:01:50,184 different parts of that substring. 1193 01:01:50,184 --> 01:01:52,047 AUDIENCE: For the memory constraint, do you have a 1194 01:01:52,047 --> 01:01:55,500 fixed size that they're allowed to use or? 1195 01:01:55,500 --> 01:01:57,330 ERIC: We decided against the fixed size. 1196 01:01:57,330 --> 01:02:04,630 We just say don't use malloc, and you can allocate constant 1197 01:02:04,630 --> 01:02:08,100 amounts of memory, and the thing is if they choose to 1198 01:02:08,100 --> 01:02:13,720 have a 16 megabyte or four gigabyte lookup table then 1199 01:02:13,720 --> 01:02:15,110 their performance will suffer anyway. 1200 01:02:15,110 --> 01:02:18,560 1201 01:02:18,560 --> 01:02:19,696 So yep? 1202 01:02:19,696 --> 01:02:21,710 AUDIENCE: What is the computer architecture? 1203 01:02:21,710 --> 01:02:22,410 ERIC: What's that? 1204 01:02:22,410 --> 01:02:24,550 AUDIENCE: What is the computer architecture? 1205 01:02:24,550 --> 01:02:26,890 SAMAN AMARASINGHE: We are running on-- 1206 01:02:26,890 --> 01:02:34,510 we got this donation from both Intel and Dell, we have 16 1207 01:02:34,510 --> 01:02:40,390 machine-segments, each with two six core processors and 48 1208 01:02:40,390 --> 01:02:41,235 gigs of memory. 1209 01:02:41,235 --> 01:02:43,640 So they're doing it on 12 cores so it becomes 1210 01:02:43,640 --> 01:02:46,116 interesting, and you got a parallel 740 gigs, so we have 1211 01:02:46,116 --> 01:02:48,149 a lot of memory in these kinds of things and we'll be asking 1212 01:02:48,149 --> 01:02:48,695 them to run through that. 1213 01:02:48,695 --> 01:02:54,100 So these were the latest what's the word? 1214 01:02:54,100 --> 01:02:54,770 PROFESSOR: Core i7. 1215 01:02:54,770 --> 01:02:55,620 SAMAN AMARASINGHE: Core i7s. 1216 01:02:55,620 --> 01:02:56,830 PROFESSOR: Nehalem. 1217 01:02:56,830 --> 01:02:59,540 ERIC: For this first project, we're asking them specifically 1218 01:02:59,540 --> 01:03:02,810 not to parallelize. 1219 01:03:02,810 --> 01:03:05,140 AUDIENCE: It's all on Windows or Linux? 1220 01:03:05,140 --> 01:03:05,940 ERIC: Linux. 1221 01:03:05,940 --> 01:03:06,856 AUDIENCE: Linux? 1222 01:03:06,856 --> 01:03:09,610 ERIC: Yeah. 1223 01:03:09,610 --> 01:03:14,430 So the idea here is to exploit bit operation and in 1224 01:03:14,430 --> 01:03:15,710 particular in rotates. 1225 01:03:15,710 --> 01:03:18,220 The reference implementation does the really stupid thing 1226 01:03:18,220 --> 01:03:25,310 of you want sort of 4,000 bits to the right rotates, well 1227 01:03:25,310 --> 01:03:29,560 I'll do it one at a time, that's the reference 1228 01:03:29,560 --> 01:03:30,810 implementation. 1229 01:03:30,810 --> 01:03:32,620 1230 01:03:32,620 --> 01:03:36,020 But they're only allowed to us a constant amount of memory, 1231 01:03:36,020 --> 01:03:40,300 so there is certain amount of tricks you have to do to do it 1232 01:03:40,300 --> 01:03:42,946 in a more efficient way. 1233 01:03:42,946 --> 01:03:45,862 AUDIENCE: Do you stress in the course about portable data 1234 01:03:45,862 --> 01:03:48,535 code from one operating system to another, one 1235 01:03:48,535 --> 01:03:51,010 machine to the other. 1236 01:03:51,010 --> 01:03:54,550 PROFESSOR: This is where we want you to stress the 1237 01:03:54,550 --> 01:03:57,380 importance of it, because that's not something that 1238 01:03:57,380 --> 01:04:01,810 we're in a position to do or enforce, or what have you, OK? 1239 01:04:01,810 --> 01:04:05,000 1240 01:04:05,000 --> 01:04:08,140 We let them assume for this problem, for example, that the 1241 01:04:08,140 --> 01:04:10,000 machine they're working on is Little Endian. 1242 01:04:10,000 --> 01:04:13,250 We talked about the issue, but we did not insist that they 1243 01:04:13,250 --> 01:04:17,850 wrote code that would be that would port to a Big Endian 1244 01:04:17,850 --> 01:04:22,500 machine, because they're running on the Intel machines. 1245 01:04:22,500 --> 01:04:27,030 But this is exactly the kind of thing where code quality 1246 01:04:27,030 --> 01:04:32,630 would say, portability, maintainability, readability, 1247 01:04:32,630 --> 01:04:36,920 all these kinds of things, this is exactly the kind of 1248 01:04:36,920 --> 01:04:39,770 thing we want you to say. 1249 01:04:39,770 --> 01:04:42,700 You say "Hey, you did it like this, in fact did you know 1250 01:04:42,700 --> 01:04:46,930 that without sacrificing anything in performance, you 1251 01:04:46,930 --> 01:04:49,600 could have made it portable from one operating system to 1252 01:04:49,600 --> 01:04:54,450 another?" And then you could talk about those issues, and 1253 01:04:54,450 --> 01:04:57,500 that's absolutely super, to do that. 1254 01:04:57,500 --> 01:05:02,420 But we are not spending a lot of class time doing that, 1255 01:05:02,420 --> 01:05:04,770 we're really focusing on the performance engineering part 1256 01:05:04,770 --> 01:05:06,120 of the course. 1257 01:05:06,120 --> 01:05:07,910 ERIC: The reference implementation should be 1258 01:05:07,910 --> 01:05:15,940 portable, so this should be portable, although we did make 1259 01:05:15,940 --> 01:05:19,900 sure here, for instance, in the reference representation 1260 01:05:19,900 --> 01:05:23,620 of bit array here, that the order of the bits within each 1261 01:05:23,620 --> 01:05:26,320 bite happened to coincide with the low end 1262 01:05:26,320 --> 01:05:27,410 ideas of these machines. 1263 01:05:27,410 --> 01:05:31,550 So that if you happen to cast it to a 64-bit integer on each 1264 01:05:31,550 --> 01:05:35,900 of the bytes in the array then you would get something that 1265 01:05:35,900 --> 01:05:43,300 was easy to work with on a low end in architecture. 1266 01:05:43,300 --> 01:05:47,060 But the reference implementation is portable 1267 01:05:47,060 --> 01:05:50,940 itself, or should be, so tell us any kind of problems with 1268 01:05:50,940 --> 01:05:53,760 the reference implementation like that. 1269 01:05:53,760 --> 01:05:56,540 The next problem is based on the puzzle, 1270 01:05:56,540 --> 01:05:59,940 it's a puzzle solver. 1271 01:05:59,940 --> 01:06:02,920 It's this puzzle that I'd never heard of before. 1272 01:06:02,920 --> 01:06:07,040 Apparently, if you generalize dominoes you get Pentominoes 1273 01:06:07,040 --> 01:06:10,080 and the five end cases. 1274 01:06:10,080 --> 01:06:16,080 So there are this many configurations of dominoes 1275 01:06:16,080 --> 01:06:19,900 with five squares on them, I guess. 1276 01:06:19,900 --> 01:06:25,250 And the pentominoes puzzle is you're given an eight by eight 1277 01:06:25,250 --> 01:06:29,900 board with four squares crossed out, and now you're 1278 01:06:29,900 --> 01:06:35,210 supposed to arrange these so that the entire board is 1279 01:06:35,210 --> 01:06:37,040 filled up, and only-- 1280 01:06:37,040 --> 01:06:37,400 what's that? 1281 01:06:37,400 --> 01:06:38,540 SAMAN AMARASINGHE: You can do flips of these-- 1282 01:06:38,540 --> 01:06:39,280 ERIC: Oh, right. 1283 01:06:39,280 --> 01:06:41,220 You can do flips, you rotate 1284 01:06:41,220 --> 01:06:43,620 SAMAN AMARASINGHE: And they will dissipate 1285 01:06:43,620 --> 01:06:45,600 and all those things. 1286 01:06:45,600 --> 01:06:50,860 ERIC: Right so the task is find all the solutions, 1287 01:06:50,860 --> 01:06:56,800 although I believe in our reference implementation that 1288 01:06:56,800 --> 01:07:01,660 was too fast, so we decided to generalize the puzzle to the 1289 01:07:01,660 --> 01:07:08,140 toroidal case, where the board wraps around the edges, just 1290 01:07:08,140 --> 01:07:10,460 to make it take a little longer, to do. 1291 01:07:10,460 --> 01:07:12,300 PROFESSOR: Like space boards right? 1292 01:07:12,300 --> 01:07:14,953 You go off the right edge you come in the left edge. 1293 01:07:14,953 --> 01:07:16,336 AUDIENCE: Top and bottom also? 1294 01:07:16,336 --> 01:07:18,650 PROFESSOR: Top and bottom also, yeah. 1295 01:07:18,650 --> 01:07:21,190 ERIC: So these two are both examples of 1296 01:07:21,190 --> 01:07:23,060 solutions to this puzzle. 1297 01:07:23,060 --> 01:07:23,680 AUDIENCE: I've got a question here. 1298 01:07:23,680 --> 01:07:24,840 ERIC: Yep. 1299 01:07:24,840 --> 01:07:26,260 AUDIENCE: Are you allowed to put the empty space 1300 01:07:26,260 --> 01:07:27,320 where ever you want? 1301 01:07:27,320 --> 01:07:33,020 ERIC: Well, that's the input to the solver. 1302 01:07:33,020 --> 01:07:34,880 SAMAN AMARASINGHE: Given these empty spaces-- 1303 01:07:34,880 --> 01:07:36,740 AUDIENCE: OK, and then it fills in the rest. 1304 01:07:36,740 --> 01:07:37,205 ERIC: That's right. 1305 01:07:37,205 --> 01:07:38,920 Of course you can put empty spaces so 1306 01:07:38,920 --> 01:07:40,300 that it can't solved. 1307 01:07:40,300 --> 01:07:42,175 And then they have to correctly determine that 1308 01:07:42,175 --> 01:07:42,490 there's no answer. 1309 01:07:42,490 --> 01:07:43,340 PROFESSOR: That there's no answer. 1310 01:07:43,340 --> 01:07:44,850 AUDIENCE: Right. 1311 01:07:44,850 --> 01:07:48,310 ERIC: And, also I believe the reference solution takes days, 1312 01:07:48,310 --> 01:07:49,910 for certain. 1313 01:07:49,910 --> 01:07:54,220 To find all the solutions of certain configurations of the 1314 01:07:54,220 --> 01:07:56,520 initial four dots. 1315 01:07:56,520 --> 01:07:59,720 So there's an option to the program we give them, to just 1316 01:07:59,720 --> 01:08:01,390 find the first 2,000 or something. 1317 01:08:01,390 --> 01:08:03,440 PROFESSOR: So once again you can see this is conducive to 1318 01:08:03,440 --> 01:08:07,460 bit tricks, where you represent the board as a 1319 01:08:07,460 --> 01:08:13,330 64-bit word and then do masking operations, and so 1320 01:08:13,330 --> 01:08:15,800 forth, to determine whether a piece fits 1321 01:08:15,800 --> 01:08:18,060 and do clever shifting. 1322 01:08:18,060 --> 01:08:21,680 It's easy to shift a piece down one row, where you're 1323 01:08:21,680 --> 01:08:27,029 trying it out, because that's just a shift by eight, but how 1324 01:08:27,029 --> 01:08:32,109 do you shift it horizontally, to come around on the other-- 1325 01:08:32,109 --> 01:08:35,200 So they have to do some shifting, some masking-- 1326 01:08:35,200 --> 01:08:40,859 So anyway, the first project is all about thinking about 1327 01:08:40,859 --> 01:08:43,074 bit representations of things, and so forth. 1328 01:08:43,074 --> 01:08:45,609 ERIC: In fact, we give them a solver that we don't really-- 1329 01:08:45,609 --> 01:08:50,960 well, a searcher, routine to search the space of possible 1330 01:08:50,960 --> 01:08:54,160 solutions, that we don't really expect them to change, 1331 01:08:54,160 --> 01:08:56,810 but they can change it if they want to do. 1332 01:08:56,810 --> 01:09:04,689 So, the interface here is basically a board data 1333 01:09:04,689 --> 01:09:08,340 structure that they're free to change the internal 1334 01:09:08,340 --> 01:09:09,689 representations of. 1335 01:09:09,689 --> 01:09:13,510 Or did we somehow prohibit that due to testing? 1336 01:09:13,510 --> 01:09:13,810 No? 1337 01:09:13,810 --> 01:09:16,649 No, no, no, that's the whole point, right. 1338 01:09:16,649 --> 01:09:23,149 So again, you have this basic accessor for use by the 1339 01:09:23,149 --> 01:09:25,330 testing routines. 1340 01:09:25,330 --> 01:09:29,410 But then what you really need to, well, you need to change 1341 01:09:29,410 --> 01:09:33,000 basically the entire implementation of all of this, 1342 01:09:33,000 --> 01:09:35,180 if you're changing the representation of the board, 1343 01:09:35,180 --> 01:09:37,770 for instance. 1344 01:09:37,770 --> 01:09:42,220 But this is the function that should be running faster after 1345 01:09:42,220 --> 01:09:45,899 you're done, so I guess that comment is misleading. 1346 01:09:45,899 --> 01:09:49,189 This is the function that is supposed to run a lot faster 1347 01:09:49,189 --> 01:09:50,850 when you're done. 1348 01:09:50,850 --> 01:09:56,470 There is actual comments in the header file. 1349 01:09:56,470 --> 01:09:58,050 So right, you give it a function 1350 01:09:58,050 --> 01:10:00,688 pointer to a call back. 1351 01:10:00,688 --> 01:10:03,650 PROFESSOR: Now, one sort of standard thing we decided 1352 01:10:03,650 --> 01:10:08,060 we're doing is, we're not trying to write both 32 and 1353 01:10:08,060 --> 01:10:12,070 64-bit code in the classroom, we're just going to do 64-bit. 1354 01:10:12,070 --> 01:10:14,880 So just one more level. 1355 01:10:14,880 --> 01:10:17,850 In practice you would want to have stuff that runs both on 1356 01:10:17,850 --> 01:10:22,190 32 and 64, but for the most part it's fine if they just 1357 01:10:22,190 --> 01:10:25,622 have it running on 64-bit. 1358 01:10:25,622 --> 01:10:30,460 ERIC: Right, so these by the way are the initial four 1359 01:10:30,460 --> 01:10:32,510 points that are the input to the puzzle. 1360 01:10:32,510 --> 01:10:35,860 1361 01:10:35,860 --> 01:10:40,660 I believe that's the problem set one. 1362 01:10:40,660 --> 01:10:41,810 Questions about, yeah? 1363 01:10:41,810 --> 01:10:45,802 AUDIENCE: Can students submit more than one answer? 1364 01:10:45,802 --> 01:10:46,800 PROFESSOR: No. 1365 01:10:46,800 --> 01:10:51,570 Nope, they got to decide what they're doing. 1366 01:10:51,570 --> 01:10:53,046 AUDIENCE: I guess I have a question about the answer. 1367 01:10:53,046 --> 01:10:53,538 ERIC: Yeah. 1368 01:10:53,538 --> 01:10:56,711 AUDIENCE: Is an answer that is probabilistically correct, I 1369 01:10:56,711 --> 01:11:00,740 mean like, it will sometimes when you test it, you have it 1370 01:11:00,740 --> 01:11:03,390 pass all the test cases, but mine isn't guaranteed to 1371 01:11:03,390 --> 01:11:05,544 necessarily always solve all test cases is that OK? 1372 01:11:05,544 --> 01:11:08,890 ERIC: If they can conceal that to us, then I think they-- 1373 01:11:08,890 --> 01:11:12,060 PROFESSOR: They deserve credit. 1374 01:11:12,060 --> 01:11:16,210 ERIC: Keep in mind that the other half of the problem set 1375 01:11:16,210 --> 01:11:20,160 is to write test cases that will catch as many obscure 1376 01:11:20,160 --> 01:11:24,100 bugs in the other students' code as possible. 1377 01:11:24,100 --> 01:11:27,270 So they run the risk of competing against-- 1378 01:11:27,270 --> 01:11:29,000 PROFESSOR: They lose extra points if they don't pass 1379 01:11:29,000 --> 01:11:32,240 their own tests. 1380 01:11:32,240 --> 01:11:33,853 AUDIENCE: They each need to write some tests 1381 01:11:33,853 --> 01:11:35,016 that will be as-- 1382 01:11:35,016 --> 01:11:36,125 PROFESSOR: Yeah, so then they-- 1383 01:11:36,125 --> 01:11:36,680 AUDIENCE: They exercise somebody else's. 1384 01:11:36,680 --> 01:11:38,160 PROFESSOR: --to somebody else's, yeah. 1385 01:11:38,160 --> 01:11:39,500 SAMAN AMARASINGHE: We are running all the tests against 1386 01:11:39,500 --> 01:11:40,850 everybody else. 1387 01:11:40,850 --> 01:11:42,935 PROFESSOR: And then for the final version we give them the 1388 01:11:42,935 --> 01:11:47,720 full regression suite of the whole class, so they have very 1389 01:11:47,720 --> 01:11:49,960 good confidence, and we good confidence that they're 1390 01:11:49,960 --> 01:11:53,080 handing in something that is correct. 1391 01:11:53,080 --> 01:11:55,740 1392 01:11:55,740 --> 01:11:58,450 SAMAN AMARASINGHE: OK, so you want to open up for-- 1393 01:11:58,450 --> 01:12:00,521 PROFESSOR: For questions or comments. 1394 01:12:00,521 --> 01:12:02,030 SAMAN AMARASINGHE: Especially, I won't even mind the people 1395 01:12:02,030 --> 01:12:06,965 who did it last time, last time to provide some of your 1396 01:12:06,965 --> 01:12:08,945 feedback on how we can... 1397 01:12:08,945 --> 01:12:10,430 [BUZZING NOISE] 1398 01:12:10,430 --> 01:12:11,420 PROFESSOR: Don't want to do that? 1399 01:12:11,420 --> 01:12:13,895 SAMAN AMARASINGHE: Yeah, 1400 01:12:13,895 --> 01:12:16,370 PROFESSOR: I was trying to turn on the lights. 1401 01:12:16,370 --> 01:12:18,450 Do we have more lights we can turn on? 1402 01:12:18,450 --> 01:12:23,813 1403 01:12:23,813 --> 01:12:25,801 SAMAN AMARASINGHE: Also, if you could turn these on, too? 1404 01:12:25,801 --> 01:12:27,300 PROFESSOR: Good. 1405 01:12:27,300 --> 01:12:30,598 Yeah, so comments? 1406 01:12:30,598 --> 01:12:33,574 AUDIENCE: I want to say that's why I was a master last year, 1407 01:12:33,574 --> 01:12:36,054 and I had a great time, but I figured I'd stay-- 1408 01:12:36,054 --> 01:12:37,542 [INTERPOSING VOICES] 1409 01:12:37,542 --> 01:12:38,534 PROFESSOR: Yeah, could you stand up so 1410 01:12:38,534 --> 01:12:39,526 people can hear you? 1411 01:12:39,526 --> 01:12:40,022 Thanks. 1412 01:12:40,022 --> 01:12:41,014 SAMAN AMARASINGHE: Give him a mic. 1413 01:12:41,014 --> 01:12:43,990 Give him a mic because I think it'll be good-- 1414 01:12:43,990 --> 01:12:46,966 PROFESSOR: It'll be good to have these-- yeah. 1415 01:12:46,966 --> 01:12:47,462 All right? 1416 01:12:47,462 --> 01:12:47,958 AUDIENCE: All right. 1417 01:12:47,958 --> 01:12:49,470 Thank you. 1418 01:12:49,470 --> 01:12:55,070 So the first thing I found really helpful was to take the 1419 01:12:55,070 --> 01:12:57,060 reference solution and actually diff what the student 1420 01:12:57,060 --> 01:12:59,130 provide because they often just provided a solution, and 1421 01:12:59,130 --> 01:13:00,800 if you don't know what they started from, it was hard to 1422 01:13:00,800 --> 01:13:01,760 tell what they'd actually done. 1423 01:13:01,760 --> 01:13:04,760 So diffing the two, that was a good place to start. 1424 01:13:04,760 --> 01:13:08,190 And then I found incredibly helpful just to spend 15 or 20 1425 01:13:08,190 --> 01:13:11,430 minutes prior to actually meeting with them, looking at 1426 01:13:11,430 --> 01:13:13,610 the code and writing like two or three or four things to 1427 01:13:13,610 --> 01:13:14,745 talk to them about. 1428 01:13:14,745 --> 01:13:17,090 And it might sound like it's going to be highfalutin and 1429 01:13:17,090 --> 01:13:20,020 stuff, but it was like they're using their returning function 1430 01:13:20,020 --> 01:13:23,120 pointers to local variables, stuff like that. 1431 01:13:23,120 --> 01:13:27,590 It was really like what the hell the makefiles were doing, 1432 01:13:27,590 --> 01:13:30,010 for example, is something that I think they really 1433 01:13:30,010 --> 01:13:32,960 appreciated me telling them that didn't get 1434 01:13:32,960 --> 01:13:34,210 talked about in class. 1435 01:13:34,210 --> 01:13:36,230 1436 01:13:36,230 --> 01:13:37,800 Especially once I got a good rapport with them, they just 1437 01:13:37,800 --> 01:13:40,380 ask questions, and I spent the whole time answering more 1438 01:13:40,380 --> 01:13:41,920 practical stuff about the problem. 1439 01:13:41,920 --> 01:13:44,780 We had a good discussion, so that's what I would suggest. 1440 01:13:44,780 --> 01:13:48,360 PROFESSOR: Thank you, that's great feedback. 1441 01:13:48,360 --> 01:13:50,730 Yeah, as I say, don't underestimate-- 1442 01:13:50,730 --> 01:13:57,170 I mean, most people learn the kinds of things you're saying, 1443 01:13:57,170 --> 01:14:02,480 but somebody told them that, hey, these are practices that 1444 01:14:02,480 --> 01:14:05,760 really don't make sense in a real software system. 1445 01:14:05,760 --> 01:14:08,210 AUDIENCE: People were, by the time we got to the projects, 1446 01:14:08,210 --> 01:14:11,605 your standard pattern was highly representative, a bunch 1447 01:14:11,605 --> 01:14:16,500 of flags you want to encode in a bunch of fields, right? 1448 01:14:16,500 --> 01:14:18,215 And you've seen them a couple times, it's 1449 01:14:18,215 --> 01:14:19,930 just a standard pattern. 1450 01:14:19,930 --> 01:14:21,530 PROFESSOR: Yeah, so one of the things you'll find in this 1451 01:14:21,530 --> 01:14:23,960 first one is that they're very confused about the difference 1452 01:14:23,960 --> 01:14:29,070 between unsigned and signed, and how shifts work, and what 1453 01:14:29,070 --> 01:14:33,870 happens when, you know, how come I shifted this thing left 1454 01:14:33,870 --> 01:14:36,320 33 bits and I got a zero. 1455 01:14:36,320 --> 01:14:37,310 Why? 1456 01:14:37,310 --> 01:14:41,350 I thought I was shifting a 64-bit value, but in fact, 1457 01:14:41,350 --> 01:14:45,760 they hadn't done 1LL, they just did 1. 1458 01:14:45,760 --> 01:14:50,840 And so there are things like that, where they don't-- 1459 01:14:50,840 --> 01:14:58,100 very low hanging fruit, if you will, to talk about. 1460 01:14:58,100 --> 01:15:00,580 AUDIENCE: Did you tell them about valgrind by the way? 1461 01:15:00,580 --> 01:15:03,133 Like, why would programs crash when they said they spent a 1462 01:15:03,133 --> 01:15:06,213 huge amount of time debugging these crazy C programs when 1463 01:15:06,213 --> 01:15:08,460 they're not used to the compiler not protecting them. 1464 01:15:08,460 --> 01:15:10,250 PROFESSOR: Actually, that's a good point because we were 1465 01:15:10,250 --> 01:15:15,490 going to try to introduce-- maybe we should do that as 1466 01:15:15,490 --> 01:15:17,540 part of the next lecture, spend a little 1467 01:15:17,540 --> 01:15:20,238 bit of time on valgrind. 1468 01:15:20,238 --> 01:15:22,470 SAMAN AMARASINGHE: Yeah. 1469 01:15:22,470 --> 01:15:24,060 PROFESSOR: Because the memory checker there is really a 1470 01:15:24,060 --> 01:15:28,150 pretty useful tool for them to get correct code. 1471 01:15:28,150 --> 01:15:28,960 AUDIENCE: I second that. 1472 01:15:28,960 --> 01:15:30,520 That thing has saved my butt so many times. 1473 01:15:30,520 --> 01:15:31,770 PROFESSOR: So many times, exactly. 1474 01:15:31,770 --> 01:15:35,102 1475 01:15:35,102 --> 01:15:39,635 AUDIENCE: I've heard that, but more low-hanging fruit for 1476 01:15:39,635 --> 01:15:48,520 valgrind is to always compile a -w all to just cache all the 1477 01:15:48,520 --> 01:15:50,750 warning and declare all warnings as errors, and it 1478 01:15:50,750 --> 01:15:52,970 just makes-- 1479 01:15:52,970 --> 01:15:54,315 PROFESSOR: I think that we have that as a 1480 01:15:54,315 --> 01:15:55,230 default in our makefile. 1481 01:15:55,230 --> 01:15:55,680 Is that right? 1482 01:15:55,680 --> 01:15:56,960 ERIC: At least for the first project. 1483 01:15:56,960 --> 01:15:59,350 PROFESSOR: The first project? 1484 01:15:59,350 --> 01:16:03,390 AUDIENCE: I think they should understand that in industry 1485 01:16:03,390 --> 01:16:08,775 practice, if you don't do that, you're a schmuck. 1486 01:16:08,775 --> 01:16:10,200 PROFESSOR: Right. 1487 01:16:10,200 --> 01:16:11,625 Yep. 1488 01:16:11,625 --> 01:16:16,170 Good, so that's good, and why, in particular, the valgrind-- 1489 01:16:16,170 --> 01:16:19,710 we discussed that last year, and really actually, the 1490 01:16:19,710 --> 01:16:22,440 upcoming lecture's exactly when we should do that. 1491 01:16:22,440 --> 01:16:24,570 SAMAN AMARASINGHE: Because there's also another tool 1492 01:16:24,570 --> 01:16:26,240 called Dr. Memory. 1493 01:16:26,240 --> 01:16:27,960 PROFESSOR: OK, which makes sense, yeah. 1494 01:16:27,960 --> 01:16:32,800 1495 01:16:32,800 --> 01:16:34,920 AUDIENCE: One issue that I experienced a little last year 1496 01:16:34,920 --> 01:16:37,122 was that people they specifically intend to write a 1497 01:16:37,122 --> 01:16:38,680 little test for their code. 1498 01:16:38,680 --> 01:16:41,526 They've mostly relied on a few runs by hand, then they wrote 1499 01:16:41,526 --> 01:16:45,110 a progression producing things that they ran earlier. 1500 01:16:45,110 --> 01:16:47,340 I guess that now you're actually encouraging them to 1501 01:16:47,340 --> 01:16:47,590 actually have a test suite. 1502 01:16:47,590 --> 01:16:50,840 PROFESSOR: Yeah, well, now they get points off if they 1503 01:16:50,840 --> 01:16:53,960 didn't write enough test that somebody else's code passed it 1504 01:16:53,960 --> 01:16:54,960 that had a bug. 1505 01:16:54,960 --> 01:16:58,740 AUDIENCE: And in this case the testing run will be as far as 1506 01:16:58,740 --> 01:17:02,830 the first turn in, and then the second turn in is just you 1507 01:17:02,830 --> 01:17:05,170 have a version to run against and then 1508 01:17:05,170 --> 01:17:06,010 just need to optimize. 1509 01:17:06,010 --> 01:17:07,080 PROFESSOR: Right, that's right. 1510 01:17:07,080 --> 01:17:09,132 SAMAN AMARASINGHE: So first, about the actual tests they 1511 01:17:09,132 --> 01:17:12,100 have write a lot of tests because that will help, and 1512 01:17:12,100 --> 01:17:14,200 the second, then you give them all the tests. 1513 01:17:14,200 --> 01:17:17,280 So they will have a lot of test suite to run and then of 1514 01:17:17,280 --> 01:17:19,726 course we have a lot of number of points we'll deduct of you 1515 01:17:19,726 --> 01:17:21,210 actually fail those test. 1516 01:17:21,210 --> 01:17:22,100 Because they have no excuse. 1517 01:17:22,100 --> 01:17:23,610 PROFESSOR: There's no excuse at that point, it's just a 1518 01:17:23,610 --> 01:17:24,340 question of having-- 1519 01:17:24,340 --> 01:17:28,360 AUDIENCE: What performance and measurement tools are you 1520 01:17:28,360 --> 01:17:30,160 going to be using this year? 1521 01:17:30,160 --> 01:17:32,955 SAMAN AMARASINGHE: So, right now, we are going to give them 1522 01:17:32,955 --> 01:17:38,690 perf because what we found was, the process of ECUT is so 1523 01:17:38,690 --> 01:17:42,090 new a lot of performance tools don't have-- like OperaFile 1524 01:17:42,090 --> 01:17:45,200 didn't work, because they haven't been ported properly. 1525 01:17:45,200 --> 01:17:46,500 There's no port for it yet. 1526 01:17:46,500 --> 01:17:49,680 So perf we are going to use, and we are thinking of giving 1527 01:17:49,680 --> 01:17:51,830 them gprof in there. 1528 01:17:51,830 --> 01:17:56,585 And then last year gave them couple Pintools we didn't ask 1529 01:17:56,585 --> 01:17:58,880 them to write anything but for example, account number 1530 01:17:58,880 --> 01:18:01,980 instruction or couple of tools they do that. 1531 01:18:01,980 --> 01:18:05,140 Those are main tools you get, and also we need to go to 1532 01:18:05,140 --> 01:18:09,400 Cilk, you'll do a bunch of Cilk tools in there. 1533 01:18:09,400 --> 01:18:12,170 AUDIENCE: Everyone last year, they were given VTune, I think 1534 01:18:12,170 --> 01:18:15,500 it was, it was too hard for them to use. 1535 01:18:15,500 --> 01:18:17,610 PROFESSOR: Yeah, that was too hard for them to use because 1536 01:18:17,610 --> 01:18:21,040 they have to use the machines remotely, and VTune and is an 1537 01:18:21,040 --> 01:18:24,750 interactive tool, and so that just made it very complicated 1538 01:18:24,750 --> 01:18:25,460 to do things. 1539 01:18:25,460 --> 01:18:28,820 So instead we're going to go with a something that has 1540 01:18:28,820 --> 01:18:33,030 textual output, and is easy, therefore, to run from command 1541 01:18:33,030 --> 01:18:37,155 line and has all the advantages of running things 1542 01:18:37,155 --> 01:18:39,160 that you get when you run things from command line. 1543 01:18:39,160 --> 01:18:42,888 1544 01:18:42,888 --> 01:18:47,050 AUDIENCE: So a logistical question so, meeting on MIT is 1545 01:18:47,050 --> 01:18:49,920 fine, but where are there designated places to meet? 1546 01:18:49,920 --> 01:18:51,870 SAMAN AMARASINGHE: We will work with student to find 1547 01:18:51,870 --> 01:18:54,070 places for them. 1548 01:18:54,070 --> 01:18:57,790 For example, there are locations for PSS students to 1549 01:18:57,790 --> 01:19:00,090 meet, and we are going to get them arranged. 1550 01:19:00,090 --> 01:19:04,840 So if in the organizing you guys can create probably an 1551 01:19:04,840 --> 01:19:05,995 online scheduling something. 1552 01:19:05,995 --> 01:19:07,230 What's that website? 1553 01:19:07,230 --> 01:19:08,650 Online is, online scheduling is-- 1554 01:19:08,650 --> 01:19:09,150 PROFESSOR: Doodle. 1555 01:19:09,150 --> 01:19:10,650 SAMAN AMARASINGHE: Doodle, Doodle or something like that, 1556 01:19:10,650 --> 01:19:14,900 and get their times and then they'll work with us to figure 1557 01:19:14,900 --> 01:19:17,910 out the place to meet, and then they can send it out. 1558 01:19:17,910 --> 01:19:22,810 One thing we will have to do is, between four students, 1559 01:19:22,810 --> 01:19:26,240 because every project we are chaining the pairings, so 1560 01:19:26,240 --> 01:19:29,200 sometimes we might end up in a way that, two of your students 1561 01:19:29,200 --> 01:19:32,170 are paired together, and then we will tell you don't put 1562 01:19:32,170 --> 01:19:34,100 them together in the same group, you'll basically have 1563 01:19:34,100 --> 01:19:36,010 to mix them in the other way. 1564 01:19:36,010 --> 01:19:38,860 If they are not in any kind of a pairing, then you can 1565 01:19:38,860 --> 01:19:40,870 organize the four in any way you want. 1566 01:19:40,870 --> 01:19:43,610 1567 01:19:43,610 --> 01:19:45,920 PROFESSOR: Actually I don't even want of the four of them, 1568 01:19:45,920 --> 01:19:47,710 I don't even want us pairing. 1569 01:19:47,710 --> 01:19:48,630 That shouldn't be. 1570 01:19:48,630 --> 01:19:50,470 But we'll see what happens. 1571 01:19:50,470 --> 01:19:52,650 Barry? 1572 01:19:52,650 --> 01:19:56,756 AUDIENCE: Last year of course was in classroom downstairs 1573 01:19:56,756 --> 01:20:00,018 and I just met them just outside the classroom. 1574 01:20:00,018 --> 01:20:01,220 There's plenty of little space. 1575 01:20:01,220 --> 01:20:03,450 PROFESSOR: Also the first floor of STATA, I mean we've 1576 01:20:03,450 --> 01:20:05,090 had a lot of people just using the first 1577 01:20:05,090 --> 01:20:06,820 floor of this building. 1578 01:20:06,820 --> 01:20:12,140 There's lots of cafe and place there, and so forth, to sit 1579 01:20:12,140 --> 01:20:17,130 there, get a coffee, and so forth. 1580 01:20:17,130 --> 01:20:19,330 So some people just did something that informally, 1581 01:20:19,330 --> 01:20:22,960 other people wanted a more quiet private place to talk. 1582 01:20:22,960 --> 01:20:28,460 And I think that we'll help the students facilitate that. 1583 01:20:28,460 --> 01:20:31,340 SAMAN AMARASINGHE: And the key thing is, especially if any 1584 01:20:31,340 --> 01:20:34,150 students are flaking out, for example, doesn't answer your 1585 01:20:34,150 --> 01:20:37,590 email, or missed the meeting, or something like that, or 1586 01:20:37,590 --> 01:20:38,600 late to the meeting, let us know. 1587 01:20:38,600 --> 01:20:41,260 Because that's part of their grade, even though you're not 1588 01:20:41,260 --> 01:20:46,420 grading them, if they are not participating in working with 1589 01:20:46,420 --> 01:20:48,380 you guys, they will get points deducted. 1590 01:20:48,380 --> 01:20:50,270 So we really want to know that, and we have tried to 1591 01:20:50,270 --> 01:20:53,440 emphasize that they have to act, and actually do it right. 1592 01:20:53,440 --> 01:20:56,320 So we really need to know that, if the students are not 1593 01:20:56,320 --> 01:20:59,120 actually cooperating with you guys. 1594 01:20:59,120 --> 01:21:02,775 PROFESSOR: So I hope that this year will have a better-- 1595 01:21:02,775 --> 01:21:05,890 1596 01:21:05,890 --> 01:21:09,380 So the vast majority of people last year had no trouble, but 1597 01:21:09,380 --> 01:21:15,010 we did have a couple of people for whom it was one or two 1598 01:21:15,010 --> 01:21:20,780 students who just made life a little bit miserable for their 1599 01:21:20,780 --> 01:21:25,490 master, and so hopefully we'll provide a few more incentives 1600 01:21:25,490 --> 01:21:28,670 this year to avoid that situation. 1601 01:21:28,670 --> 01:21:33,110 But they're students and so they-- 1602 01:21:33,110 --> 01:21:35,700 AUDIENCE: When do we find out which students 1603 01:21:35,700 --> 01:21:37,748 are assigned to us? 1604 01:21:37,748 --> 01:21:39,212 SAMAN AMARASINGHE: Probably the next two days. 1605 01:21:39,212 --> 01:21:42,628 1606 01:21:42,628 --> 01:21:46,532 OK, and then who's responsible for contacting whom? 1607 01:21:46,532 --> 01:21:49,340 1608 01:21:49,340 --> 01:21:50,144 That's a good question. 1609 01:21:50,144 --> 01:21:51,265 Who should we contact? 1610 01:21:51,265 --> 01:21:53,120 PROFESSOR: We decided that, didn't we, at the meeting? 1611 01:21:53,120 --> 01:21:54,370 What did we decide? 1612 01:21:54,370 --> 01:21:57,274 1613 01:21:57,274 --> 01:21:58,556 AUDIENCE: This is what happens when you don't 1614 01:21:58,556 --> 01:22:01,230 write things down. 1615 01:22:01,230 --> 01:22:02,640 SAMAN AMARASINGHE: You have to cover the old stuff. 1616 01:22:02,640 --> 01:22:09,530 1617 01:22:09,530 --> 01:22:11,450 PROFESSOR: Let's see, so last time I think we had it that 1618 01:22:11,450 --> 01:22:14,930 the students contacted the mentor, and then-- 1619 01:22:14,930 --> 01:22:17,090 SAMAN AMARASINGHE: What we will do is we will set up, 1620 01:22:17,090 --> 01:22:19,820 we'll send the intro email to everybody, we'll send the 1621 01:22:19,820 --> 01:22:22,860 intro email to the mentor, Cc the student then saying I am 1622 01:22:22,860 --> 01:22:24,780 introducing you to each other. 1623 01:22:24,780 --> 01:22:27,880 And then one thing you can do is immediately reply and, if 1624 01:22:27,880 --> 01:22:30,300 you have Peter Doodle Paul, or something like that. 1625 01:22:30,300 --> 01:22:32,515 And then say, OK, look, do you know your students? 1626 01:22:32,515 --> 01:22:34,570 So you can reply to that and hopefully they will reply 1627 01:22:34,570 --> 01:22:36,170 back, and proceed. 1628 01:22:36,170 --> 01:22:38,865 So when we send you the names you will also see the emails 1629 01:22:38,865 --> 01:22:39,120 of students. 1630 01:22:39,120 --> 01:22:40,755 PROFESSOR: Are people familiar with doodle? 1631 01:22:40,755 --> 01:22:43,390 Anybody not familiar with doodle? 1632 01:22:43,390 --> 01:22:47,850 So doodle is a website where you can basically enter a 1633 01:22:47,850 --> 01:22:53,180 whole bunch of times, and then people enter their names and 1634 01:22:53,180 --> 01:22:57,190 mark off which times they can make things. 1635 01:22:57,190 --> 01:22:58,460 It's a poll source. 1636 01:22:58,460 --> 01:23:00,074 SAMAN AMARASINGHE: Don't do what I did the last time, I 1637 01:23:00,074 --> 01:23:03,960 marked off all the times that I cannot participate, so I was 1638 01:23:03,960 --> 01:23:05,200 basically the exact opposite. 1639 01:23:05,200 --> 01:23:09,310 PROFESSOR: It's green and red, is what the colors they use. 1640 01:23:09,310 --> 01:23:12,615 So green means you can make it, and red means you can't. 1641 01:23:12,615 --> 01:23:15,550 So, anyway you don't have to use that facility, but it is a 1642 01:23:15,550 --> 01:23:16,810 convenient one to use. 1643 01:23:16,810 --> 01:23:19,702 1644 01:23:19,702 --> 01:23:23,360 AUDIENCE: Can we expect students to be dropping? 1645 01:23:23,360 --> 01:23:24,470 SAMAN AMARASINGHE: There will be people dropping. 1646 01:23:24,470 --> 01:23:25,740 They just started. 1647 01:23:25,740 --> 01:23:28,820 1648 01:23:28,820 --> 01:23:32,470 This is also a group project and at 2:00 AM we got mails 1649 01:23:32,470 --> 01:23:34,910 saying OK, I'm dropping the class, and we had to scramble 1650 01:23:34,910 --> 01:23:36,840 trying to add a 3:00 AM to create another 1651 01:23:36,840 --> 01:23:39,180 group, and so, Yeah. 1652 01:23:39,180 --> 01:23:41,480 AUDIENCE: You shouldn't take dropping as a 1653 01:23:41,480 --> 01:23:44,603 reflection on our end. 1654 01:23:44,603 --> 01:23:46,580 People drop out. 1655 01:23:46,580 --> 01:23:47,790 SAMAN AMARASINGHE: You have to know that. 1656 01:23:47,790 --> 01:23:49,040 PROFESSOR: You can if you want. 1657 01:23:49,040 --> 01:23:54,136 1658 01:23:54,136 --> 01:23:56,620 AUDIENCE: I had like three people drop 1659 01:23:56,620 --> 01:23:59,314 PROFESSOR: No, that tends to be more-- 1660 01:23:59,314 --> 01:24:02,116 AUDIENCE: I had one student, it was awesome. 1661 01:24:02,116 --> 01:24:04,460 So easy. 1662 01:24:04,460 --> 01:24:05,040 PROFESSOR: Yeah. 1663 01:24:05,040 --> 01:24:07,300 AUDIENCE: To get an idea of the mindset the students are 1664 01:24:07,300 --> 01:24:12,258 going to be in this sort of a really tough 6-170 type thing, 1665 01:24:12,258 --> 01:24:14,090 or is this one of the easier classes. 1666 01:24:14,090 --> 01:24:15,570 PROFESSOR: No this is a challenging class. 1667 01:24:15,570 --> 01:24:18,210 SAMAN AMARASINGHE: So you take 6-170 that 1668 01:24:18,210 --> 01:24:19,490 has about four projects. 1669 01:24:19,490 --> 01:24:24,032 We doubled the number of turn-ins because each project 1670 01:24:24,032 --> 01:24:26,540 has beta and a final, and some projects has 1671 01:24:26,540 --> 01:24:27,680 two turn-ins in there. 1672 01:24:27,680 --> 01:24:31,250 So basically, they have all their big projects going on, 1673 01:24:31,250 --> 01:24:34,145 because they are doing the new project and they have 1674 01:24:34,145 --> 01:24:36,045 submitted final on the previous project. 1675 01:24:36,045 --> 01:24:39,640 And they're already completed project zero that was-- 1676 01:24:39,640 --> 01:24:41,901 PROFESSOR: Just like real life huh? 1677 01:24:41,901 --> 01:24:43,769 SAMAN AMARASINGHE: We gave them project zero. 1678 01:24:43,769 --> 01:24:48,517 That was built to to get used to the system and we can help 1679 01:24:48,517 --> 01:24:51,120 them with the class, they have to finish this one. 1680 01:24:51,120 --> 01:24:54,585 So this class just screams excess very, very-- 1681 01:24:54,585 --> 01:24:59,150 PROFESSOR: Yeah, and of course they're students, some of them 1682 01:24:59,150 --> 01:25:02,250 have learned you put off things to the end, and haven't 1683 01:25:02,250 --> 01:25:07,195 learned the lessons of well not always. 1684 01:25:07,195 --> 01:25:10,470 1685 01:25:10,470 --> 01:25:16,600 So as I said, as a group they're relatively immature 1686 01:25:16,600 --> 01:25:19,420 when it comes to some of these things, but there's a large 1687 01:25:19,420 --> 01:25:23,670 fraction of them who are incredibly mature about these 1688 01:25:23,670 --> 01:25:24,430 kinds of things. 1689 01:25:24,430 --> 01:25:31,590 So our job is as lecturers in the class is to make it so 1690 01:25:31,590 --> 01:25:35,180 that the students who start work 1691 01:25:35,180 --> 01:25:37,360 early don't get penalized. 1692 01:25:37,360 --> 01:25:39,970 And that's probably the hardest thing in the software 1693 01:25:39,970 --> 01:25:43,840 related class because, the classic thing is that they 1694 01:25:43,840 --> 01:25:48,390 want to get started, they find all the bugs right? 1695 01:25:48,390 --> 01:25:50,410 And they waste their time doing it, and if you do it 1696 01:25:50,410 --> 01:25:53,900 later, then the TAs have worked all the bugs out. 1697 01:25:53,900 --> 01:25:59,460 So one of our challenges is to make it so that students who 1698 01:25:59,460 --> 01:26:05,090 start early are rewarded by being able to have more time 1699 01:26:05,090 --> 01:26:06,350 not wasting their time. 1700 01:26:06,350 --> 01:26:08,440 SAMAN AMARASINGHE: And today was the day that they turn in 1701 01:26:08,440 --> 01:26:11,530 the project and by looking at the class, you realize they 1702 01:26:11,530 --> 01:26:13,810 haven't gone to sleep, and I asked and most people haven't 1703 01:26:13,810 --> 01:26:15,290 slept in about 30 hours. 1704 01:26:15,290 --> 01:26:17,970 They have been up entire last night and an email 1705 01:26:17,970 --> 01:26:20,390 conversation when I went to sleep there was 1706 01:26:20,390 --> 01:26:21,360 an email train going. 1707 01:26:21,360 --> 01:26:22,740 Every five minutes, something pop up. 1708 01:26:22,740 --> 01:26:26,200 When I woke up, the train was still going, and amazingly, 1709 01:26:26,200 --> 01:26:29,317 there were a couple of TAs up and answering all through the 1710 01:26:29,317 --> 01:26:31,600 night, and that kept continuing. 1711 01:26:31,600 --> 01:26:36,200 So these kids they can be flaky sometimes, but they're 1712 01:26:36,200 --> 01:26:37,280 amazingly hard working. 1713 01:26:37,280 --> 01:26:38,450 And this is only one class they're taking. 1714 01:26:38,450 --> 01:26:41,630 They might be taking four classes like that. 1715 01:26:41,630 --> 01:26:44,730 And I have seen people scheduling their schedule as 1716 01:26:44,730 --> 01:26:47,510 by hour, scheduling and they say, OK, look I can do the 1717 01:26:47,510 --> 01:26:49,680 problems set or I have one hour of sleep. 1718 01:26:49,680 --> 01:26:52,580 And a lot of times that's their thing, and then 1719 01:26:52,580 --> 01:26:55,180 sometimes they triage. 1720 01:26:55,180 --> 01:26:58,340 That's why sometimes they miss classes, they realize, OK, I 1721 01:26:58,340 --> 01:27:02,490 can do the problem set, I can sleep, I came do that. 1722 01:27:02,490 --> 01:27:05,600 So I think these kids work amazingly hard. 1723 01:27:05,600 --> 01:27:09,500 PROFESSOR: I do think it's helpful to also counsel them 1724 01:27:09,500 --> 01:27:13,570 on, hey, you can't do everything on a death march. 1725 01:27:13,570 --> 01:27:17,660 You got to learn at some point what you're capable of, and 1726 01:27:17,660 --> 01:27:21,390 manage your own time resources and so forth. 1727 01:27:21,390 --> 01:27:25,640 Because the joke at MIT is, classes, 1728 01:27:25,640 --> 01:27:27,670 friends, sleep, pick two. 1729 01:27:27,670 --> 01:27:31,260 1730 01:27:31,260 --> 01:27:33,920 The other thing, let me just say, is that despite the 1731 01:27:33,920 --> 01:27:39,430 obvious sleep deprivation we saw in the class today the 1732 01:27:39,430 --> 01:27:43,150 number of students who came up after class so charged about 1733 01:27:43,150 --> 01:27:49,010 working on this first project was really quite amazing. 1734 01:27:49,010 --> 01:27:50,570 They were all very, very excited. 1735 01:27:50,570 --> 01:27:54,030 And very excited we also gave them the initial feedback on 1736 01:27:54,030 --> 01:27:57,000 the performance, and you could see, there's one group of 1737 01:27:57,000 --> 01:27:59,480 students who clearly got it, and then there's another tier 1738 01:27:59,480 --> 01:28:03,670 of students who didn't get it quite this much, and then 1739 01:28:03,670 --> 01:28:07,120 there's the ones who their code has errors and stuff. 1740 01:28:07,120 --> 01:28:10,280 1741 01:28:10,280 --> 01:28:14,110 There's no doubt that there are a lot of students who are 1742 01:28:14,110 --> 01:28:15,630 very charged about this. 1743 01:28:15,630 --> 01:28:18,270 This is a fun class but it's a hard class. 1744 01:28:18,270 --> 01:28:21,020 1745 01:28:21,020 --> 01:28:23,040 SAMAN AMARASINGHE: I think you'll find this is true. 1746 01:28:23,040 --> 01:28:26,240 They will be, probably tired, but they will be soaking up 1747 01:28:26,240 --> 01:28:29,280 this information like a sieve, and sometimes 1748 01:28:29,280 --> 01:28:32,590 I found last year's-- 1749 01:28:32,590 --> 01:28:36,080 After the looking at the first set of code, some of those the 1750 01:28:36,080 --> 01:28:38,200 masters were really upset. 1751 01:28:38,200 --> 01:28:40,820 How can you teach you guys, these guys write this kind of 1752 01:28:40,820 --> 01:28:43,950 bad code, but when they realized after they said 1753 01:28:43,950 --> 01:28:45,790 something, this is getting into their heads. 1754 01:28:45,790 --> 01:28:47,900 I mean, they're improving they're actually changing. 1755 01:28:47,900 --> 01:28:49,920 These guys are very smart, and they're looking 1756 01:28:49,920 --> 01:28:51,470 for you guys for-- 1757 01:28:51,470 --> 01:28:54,790 They're basically sponge, really empty sponge. 1758 01:28:54,790 --> 01:28:59,220 They're going absorb a lot in this class. 1759 01:28:59,220 --> 01:29:02,610 PROFESSOR: I have a 2 and 1/2 year old at home, and it's 1760 01:29:02,610 --> 01:29:07,545 amazing what the progress is she's made in six months. 1761 01:29:07,545 --> 01:29:12,910 She talking now in complete sentences, and so forth, it's 1762 01:29:12,910 --> 01:29:14,990 just really amazing how how she does it, and these 1763 01:29:14,990 --> 01:29:16,630 students are like that. 1764 01:29:16,630 --> 01:29:19,410 They start out and you say, oh my God, they have no skills 1765 01:29:19,410 --> 01:29:19,730 whatsoever. 1766 01:29:19,730 --> 01:29:24,280 By the end of the term the progress that they've made is 1767 01:29:24,280 --> 01:29:26,120 really astounding. 1768 01:29:26,120 --> 01:29:29,080 You just say, gee if you could just keep on that trajectory 1769 01:29:29,080 --> 01:29:31,860 your whole life. 1770 01:29:31,860 --> 01:29:34,240 But really, they really are very smart, and they come up 1771 01:29:34,240 --> 01:29:38,230 to speed very, very fast, especially given good 1772 01:29:38,230 --> 01:29:38,660 counseling. 1773 01:29:38,660 --> 01:29:41,180 The main thing that they need right now is just the 1774 01:29:41,180 --> 01:29:43,880 attention so somebody actually can look at their code and 1775 01:29:43,880 --> 01:29:48,640 say, you know you did it like this it would be better code. 1776 01:29:48,640 --> 01:29:54,760 1777 01:29:54,760 --> 01:29:57,740 Any other questions or issues? 1778 01:29:57,740 --> 01:29:58,950 This is lots of fun. 1779 01:29:58,950 --> 01:30:01,960 If you run into any troubles, we're right here, 1780 01:30:01,960 --> 01:30:03,970 just send us email. 1781 01:30:03,970 --> 01:30:12,390 And as I say they're young and immature, but then you get to 1782 01:30:12,390 --> 01:30:16,840 see them grow, of course some of them will flake out on you, 1783 01:30:16,840 --> 01:30:22,780 but the vast majority, you'll see, are really very dedicated 1784 01:30:22,780 --> 01:30:23,520 and well meaning. 1785 01:30:23,520 --> 01:30:26,380 They really want to do a good job in the class, and really, 1786 01:30:26,380 --> 01:30:28,240 really find the class very exciting. 1787 01:30:28,240 --> 01:30:34,440 Our numbers, in fact, almost doubled for last year. 1788 01:30:34,440 --> 01:30:38,990 So the reputation got around that this was a 1789 01:30:38,990 --> 01:30:40,460 good class to be doing. 1790 01:30:40,460 --> 01:30:44,570 And the other thing is, right now what I really like about 1791 01:30:44,570 --> 01:30:47,450 the class, the students right now compared with 1792 01:30:47,450 --> 01:30:49,260 say 10 years ago. 1793 01:30:49,260 --> 01:30:52,940 So 10 years ago we had the Internet boom, and there were 1794 01:30:52,940 --> 01:30:56,960 all kinds of students taking computer science because they 1795 01:30:56,960 --> 01:31:01,140 thought it was a ticket to fortune and so forth. 1796 01:31:01,140 --> 01:31:11,790 And now we're back to what it was pre-2000, 1998, whatever. 1797 01:31:11,790 --> 01:31:14,040 Where the vast majority of students who are taking the 1798 01:31:14,040 --> 01:31:16,840 class really enjoy engineering. 1799 01:31:16,840 --> 01:31:18,270 They really enjoy the software. 1800 01:31:18,270 --> 01:31:19,390 They really enjoy the engineering. 1801 01:31:19,390 --> 01:31:23,690 The fact that you end up with a pretty good job and 1802 01:31:23,690 --> 01:31:26,650 opportunity sometimes to do entrepreneurship, and 1803 01:31:26,650 --> 01:31:31,320 opportunity to explore things, it's sort of like, oh that's a 1804 01:31:31,320 --> 01:31:32,090 fringe benefit. 1805 01:31:32,090 --> 01:31:35,030 But what they're really after is just the intellectual 1806 01:31:35,030 --> 01:31:36,110 excitement and so forth. 1807 01:31:36,110 --> 01:31:40,070 So it's really quite fun to work with the students and 1808 01:31:40,070 --> 01:31:42,810 quite rewarding. 1809 01:31:42,810 --> 01:31:45,820 Really very nice type of class to have right now, where the 1810 01:31:45,820 --> 01:31:48,140 students taking it because they're actually interested in 1811 01:31:48,140 --> 01:31:51,990 the material, not because it buys them a bread ticket, meal 1812 01:31:51,990 --> 01:31:54,510 ticket, whatever. 1813 01:31:54,510 --> 01:31:55,020 Yeah, question? 1814 01:31:55,020 --> 01:31:57,280 AUDIENCE: The standard, is the coding standard in the 1815 01:31:57,280 --> 01:32:02,740 reference, the standard is to consider for them provided? 1816 01:32:02,740 --> 01:32:05,790 SAMAN AMARASINGHE: I don't think we have set up a 1817 01:32:05,790 --> 01:32:07,280 standard, per se. 1818 01:32:07,280 --> 01:32:09,660 What we want them to do is kind of 1819 01:32:09,660 --> 01:32:11,640 create their own style. 1820 01:32:11,640 --> 01:32:16,240 It's like in a writing class, you don't give them a standard 1821 01:32:16,240 --> 01:32:18,615 writing guideline is to follow this one, you don't constrain 1822 01:32:18,615 --> 01:32:20,260 them to that. 1823 01:32:20,260 --> 01:32:24,980 We want to give them the opportunity to grow into their 1824 01:32:24,980 --> 01:32:29,905 style, but kind of guide them, so that they don't make the 1825 01:32:29,905 --> 01:32:31,155 classic mistakes. 1826 01:32:31,155 --> 01:32:33,930 1827 01:32:33,930 --> 01:32:36,350 That's why we need you guys, I mean, if there's a standard, 1828 01:32:36,350 --> 01:32:38,490 we can come up with a standard, create a script to 1829 01:32:38,490 --> 01:32:40,790 actually check the standard, and then say, OK, thou shall 1830 01:32:40,790 --> 01:32:41,960 follow the standard. 1831 01:32:41,960 --> 01:32:43,880 And you can do that and everybody will hate it. 1832 01:32:43,880 --> 01:32:46,410 1833 01:32:46,410 --> 01:32:47,710 You can't make that bad happen. 1834 01:32:47,710 --> 01:32:50,350 One thing you want to do is make them lifelong good 1835 01:32:50,350 --> 01:32:53,250 coders, not something they realize OK, I need to do this 1836 01:32:53,250 --> 01:32:55,360 to get this grade, and I'm going to abandon everything 1837 01:32:55,360 --> 01:32:57,740 and convince myself never to that again. 1838 01:32:57,740 --> 01:33:00,400 And we have had sometimes, like when we needed all this 1839 01:33:00,400 --> 01:33:00,900 software engineering. 1840 01:33:00,900 --> 01:33:03,650 We went through things like thou shall write all the 1841 01:33:03,650 --> 01:33:06,330 preconditions and postconditions, and everything 1842 01:33:06,330 --> 01:33:06,910 will be graded. 1843 01:33:06,910 --> 01:33:11,700 And people did it, but half of them got into them and said 1844 01:33:11,700 --> 01:33:12,380 this is good things. 1845 01:33:12,380 --> 01:33:14,340 Other half, they didn't realize why they're doing it, 1846 01:33:14,340 --> 01:33:15,480 they just hated it. 1847 01:33:15,480 --> 01:33:19,200 And I don't think they left assuming I would 1848 01:33:19,200 --> 01:33:20,120 never do this again. 1849 01:33:20,120 --> 01:33:22,270 So the key thing here is, we don't want force 1850 01:33:22,270 --> 01:33:23,410 something on to them. 1851 01:33:23,410 --> 01:33:25,830 We want them to come through a natural process, and I think a 1852 01:33:25,830 --> 01:33:28,110 lot of them, can, when they understand what they're doing, 1853 01:33:28,110 --> 01:33:30,790 they'll develop a really good kind of practice. 1854 01:33:30,790 --> 01:33:35,180 PROFESSOR: It's also the case, I think, that coding standards 1855 01:33:35,180 --> 01:33:38,570 vary culturally from place to place, and the what people 1856 01:33:38,570 --> 01:33:41,250 expect in one place is different from what thing. 1857 01:33:41,250 --> 01:33:45,490 So being too prescriptive means, as Saman is saying, 1858 01:33:45,490 --> 01:33:50,730 that it becomes a grammatical thing, rather than is this 1859 01:33:50,730 --> 01:33:51,970 code organized. 1860 01:33:51,970 --> 01:33:54,660 The real thing, coding standards are very important, 1861 01:33:54,660 --> 01:34:00,230 especially in large software organizations of course, so 1862 01:34:00,230 --> 01:34:03,340 that everybody can tell what's going on in any particular 1863 01:34:03,340 --> 01:34:05,750 piece of code without having been the author. 1864 01:34:05,750 --> 01:34:09,100 But in this kind of thing where we have something that's 1865 01:34:09,100 --> 01:34:11,830 relatively small, what we're mostly interested in is the 1866 01:34:11,830 --> 01:34:17,940 organizational aspects of coding style, as opposed to 1867 01:34:17,940 --> 01:34:20,950 the grammatical ones. 1868 01:34:20,950 --> 01:34:23,650 SAMAN AMARASINGHE: So also don't impose your standard and 1869 01:34:23,650 --> 01:34:26,500 say, my company this is what we do, I want to follow that. 1870 01:34:26,500 --> 01:34:29,740 Just figure out and kind of guide them towards something 1871 01:34:29,740 --> 01:34:33,260 while they're maturing, and try to make it better. 1872 01:34:33,260 --> 01:34:33,820 That's the thing. 1873 01:34:33,820 --> 01:34:37,660 That's why you cannot have a cookie-cutter model. 1874 01:34:37,660 --> 01:34:39,550 PROFESSOR: And why it's good to have senior software 1875 01:34:39,550 --> 01:34:47,300 engineers who understand what's really important, as 1876 01:34:47,300 --> 01:34:55,900 opposed to what might be required in any particular 1877 01:34:55,900 --> 01:34:58,780 individual situation. 1878 01:34:58,780 --> 01:35:01,245 SAMAN AMARASINGHE: One other topic I want to add is 1879 01:35:01,245 --> 01:35:04,430 sometimes when you have two students, there might be a 1880 01:35:04,430 --> 01:35:07,750 case that one person might be very talkative and dominating, 1881 01:35:07,750 --> 01:35:10,250 and one person might be just a listener, and so you have to 1882 01:35:10,250 --> 01:35:14,360 keep an eye on that and make sure that you give the other 1883 01:35:14,360 --> 01:35:17,430 person opportunities to talk, and because it might 1884 01:35:17,430 --> 01:35:19,050 be just like that. 1885 01:35:19,050 --> 01:35:21,540 Encouragement and stuff like that, so make sure that you 1886 01:35:21,540 --> 01:35:23,940 get both of them to talk. 1887 01:35:23,940 --> 01:35:25,980 And also the are supposed to be 1888 01:35:25,980 --> 01:35:27,150 responsible for all the code. 1889 01:35:27,150 --> 01:35:29,850 You should not let them get away by saying, oh my partner 1890 01:35:29,850 --> 01:35:31,530 wrote it, so I don't understand. 1891 01:35:31,530 --> 01:35:33,700 So that's not a good answer. 1892 01:35:33,700 --> 01:35:36,980 So get them to actually go through that, and if they 1893 01:35:36,980 --> 01:35:39,970 don't come prepared tell them that, and you can give them 1894 01:35:39,970 --> 01:35:41,930 some feedback, as a next time can you please 1895 01:35:41,930 --> 01:35:44,260 do, this and this. 1896 01:35:44,260 --> 01:35:46,640 Because they also don't know what to expect, and we give 1897 01:35:46,640 --> 01:35:49,610 them a little bit of guideline, but it'll be good, 1898 01:35:49,610 --> 01:35:51,870 also for you, the first time around, if you find some 1899 01:35:51,870 --> 01:35:56,000 mistakes also for the next code review you can encourage 1900 01:35:56,000 --> 01:35:58,970 them what to do, how to prepare and what to do. 1901 01:35:58,970 --> 01:36:01,470 Don't give them too much work, because we're already giving 1902 01:36:01,470 --> 01:36:02,140 them enough work. 1903 01:36:02,140 --> 01:36:05,750 Don't ask them to write extra documentation, but you can say 1904 01:36:05,750 --> 01:36:09,040 it would have been nice if you had this level of preparation, 1905 01:36:09,040 --> 01:36:11,990 if you could have explained to me, or given me a summary, or 1906 01:36:11,990 --> 01:36:12,810 something like that. 1907 01:36:12,810 --> 01:36:16,100 So something like that is something you can expect. 1908 01:36:16,100 --> 01:36:19,580 And the other thing is if you had to figure out how we want 1909 01:36:19,580 --> 01:36:20,280 to do code review. 1910 01:36:20,280 --> 01:36:23,090 So, for example, you might want to bring your laptop, or 1911 01:36:23,090 --> 01:36:26,540 ask them to bring a laptop in there, if you want each other 1912 01:36:26,540 --> 01:36:29,000 to look at the code on the computer, so ask them to bring 1913 01:36:29,000 --> 01:36:30,590 the laptops or something. 1914 01:36:30,590 --> 01:36:34,830 So think about the logistics of how you're going to do 1915 01:36:34,830 --> 01:36:37,050 that, and that'll be useful. 1916 01:36:37,050 --> 01:36:39,290 PROFESSOR: And I think any other sort of expectations you 1917 01:36:39,290 --> 01:36:45,530 have, in your email to them the first time say, here's 1918 01:36:45,530 --> 01:36:46,610 what I'd like you. 1919 01:36:46,610 --> 01:36:48,760 I think it's helpful to say I'd like you to come prepared 1920 01:36:48,760 --> 01:36:53,120 to give me a five minute update on how you did each of 1921 01:36:53,120 --> 01:36:54,760 the problems, for example. 1922 01:36:54,760 --> 01:36:57,310 We will be telling them that, but to have it come directly 1923 01:36:57,310 --> 01:37:00,320 from you means-- 1924 01:37:00,320 --> 01:37:03,550 The difference if I say go do this to that person, versus 1925 01:37:03,550 --> 01:37:08,870 you're coming to me and expecting it. 1926 01:37:08,870 --> 01:37:10,120 Good. 1927 01:37:10,120 --> 01:37:11,700 1928 01:37:11,700 --> 01:37:17,140 So, I want to once again, I can't thank you folks enough 1929 01:37:17,140 --> 01:37:20,360 for being willing to give your time. 1930 01:37:20,360 --> 01:37:27,390 Time is the stuff life is made out of, so I really appreciate 1931 01:37:27,390 --> 01:37:31,870 your willingness to volunteer your time for these students, 1932 01:37:31,870 --> 01:37:37,040 and I really think you have a dramatically meaningful impact 1933 01:37:37,040 --> 01:37:38,290 on the students. 1934 01:37:38,290 --> 01:37:40,610 1935 01:37:40,610 --> 01:37:44,690 The students may or may not fully appreciate that, OK, but 1936 01:37:44,690 --> 01:37:48,990 Saman and I really appreciate that, and we will make sure 1937 01:37:48,990 --> 01:37:52,012 the students appreciate it. 1938 01:37:52,012 --> 01:37:52,505 AUDIENCE: Yeah. 1939 01:37:52,505 --> 01:37:53,491 I just have one. 1940 01:37:53,491 --> 01:37:56,942 What what are the guidelines for a contact outside of the 1941 01:37:56,942 --> 01:37:58,421 code reviews with the students. 1942 01:37:58,421 --> 01:38:03,130 I mean are they, can we have them email us with questions 1943 01:38:03,130 --> 01:38:06,460 about the process and just kind of general guidance 1944 01:38:06,460 --> 01:38:08,990 PROFESSOR: It's your level of tolerance we don't want you to 1945 01:38:08,990 --> 01:38:12,640 have to commit more than about 20 hours across the term, 1946 01:38:12,640 --> 01:38:14,690 because then it becomes onerous. 1947 01:38:14,690 --> 01:38:20,520 But if you're willing I think it's completely open ended, in 1948 01:38:20,520 --> 01:38:22,320 terms of how much else. 1949 01:38:22,320 --> 01:38:29,110 1950 01:38:29,110 --> 01:38:31,560 I mean it's one thing if you go into solving their problems 1951 01:38:31,560 --> 01:38:34,810 for them, that we don't want you doing, but when it comes 1952 01:38:34,810 --> 01:38:47,990 to, especially the quality, and non-metrical aspects of 1953 01:38:47,990 --> 01:38:51,820 programming, the more you can give them the better, OK? 1954 01:38:51,820 --> 01:38:55,780 Because it's only making them be better programmers. 1955 01:38:55,780 --> 01:38:58,430 And I think the fact that there may be some unevenness 1956 01:38:58,430 --> 01:39:01,530 in that across the masters is irrelevant. 1957 01:39:01,530 --> 01:39:06,100 Really, I do not want to hold back some students from 1958 01:39:06,100 --> 01:39:09,140 getting good mentorship because somebody else is not 1959 01:39:09,140 --> 01:39:13,870 getting the same level of attention, et cetera. 1960 01:39:13,870 --> 01:39:17,560 But really, no expectation there, on our part, to do more 1961 01:39:17,560 --> 01:39:21,760 than the code reviews themselves. 1962 01:39:21,760 --> 01:39:22,760 SAMAN AMARASINGHE: So, that said I want to make sure that 1963 01:39:22,760 --> 01:39:24,990 you aren't answering their question, at some point I 1964 01:39:24,990 --> 01:39:28,330 don't want to be a crutch for them. 1965 01:39:28,330 --> 01:39:32,100 For example, if they say, OK, before prebeta, they say OK, 1966 01:39:32,100 --> 01:39:35,030 this is my next problem, can you on a little bit, I didn't 1967 01:39:35,030 --> 01:39:35,810 understand. 1968 01:39:35,810 --> 01:39:39,060 If you have that, so they're trying to get too much into 1969 01:39:39,060 --> 01:39:42,830 that level, kind of making you their programmer, or something 1970 01:39:42,830 --> 01:39:44,810 like that, just let us know. 1971 01:39:44,810 --> 01:39:47,610 A lot of these things, there will be a lot of cases that 1972 01:39:47,610 --> 01:39:49,890 arise that we haven't thought through. 1973 01:39:49,890 --> 01:39:52,280 The students are ingenious enough they will find a lot of 1974 01:39:52,280 --> 01:39:54,245 loopholes, a lot of kind of interesting things that we 1975 01:39:54,245 --> 01:39:55,090 never thought through. 1976 01:39:55,090 --> 01:39:57,740 So if you find something that you're not feeling comfortable 1977 01:39:57,740 --> 01:39:59,800 just send a mail and say OK, take a look. 1978 01:39:59,800 --> 01:40:01,840 PROFESSOR: It really is, if their questions are about 1979 01:40:01,840 --> 01:40:04,540 course content it's not appropriate for you folks to 1980 01:40:04,540 --> 01:40:05,545 be dealing with, really. 1981 01:40:05,545 --> 01:40:08,380 OK, that's what our TAs are for, and course staff. 1982 01:40:08,380 --> 01:40:17,770 If it's about coding style and engineering practice, and even 1983 01:40:17,770 --> 01:40:20,760 time management, or anything that's sort of the 1984 01:40:20,760 --> 01:40:27,130 non-technical aspects, but things that have a strong 1985 01:40:27,130 --> 01:40:29,830 impact on technical, that yes. 1986 01:40:29,830 --> 01:40:31,510 Anything you can provide there is great. 1987 01:40:31,510 --> 01:40:34,330 SAMAN AMARASINGHE: So if you find anything that's outside 1988 01:40:34,330 --> 01:40:36,310 the norm of what we discussed if you feel a little bit 1989 01:40:36,310 --> 01:40:37,620 uncomfortable, just send email. 1990 01:40:37,620 --> 01:40:39,560 Send an email, and say, hey, can I do this? 1991 01:40:39,560 --> 01:40:40,400 Is it OK, for me to do this? 1992 01:40:40,400 --> 01:40:43,480 And then we can always provide guidance, so we are 1993 01:40:43,480 --> 01:40:43,690 responsible. 1994 01:40:43,690 --> 01:40:45,680 PROFESSOR: --do something and say after the fact, oh, it 1995 01:40:45,680 --> 01:40:48,690 went past, let us know. 1996 01:40:48,690 --> 01:40:54,760 There's rarely anything you can do on one shot basis that 1997 01:40:54,760 --> 01:40:59,070 is heinous or unrecoverable from, or whatever, so. 1998 01:40:59,070 --> 01:40:59,840 SAMAN AMARASINGHE: It is always good, 1999 01:40:59,840 --> 01:41:01,670 I mean that's why-- 2000 01:41:01,670 --> 01:41:04,340 since we see everybody able to and we have done these kind of 2001 01:41:04,340 --> 01:41:05,460 situation before. 2002 01:41:05,460 --> 01:41:07,270 We can just easily tell you what. 2003 01:41:07,270 --> 01:41:12,350 PROFESSOR: But, mentor them, for sure, mentor them. 2004 01:41:12,350 --> 01:41:14,270 SAMAN AMARASINGHE: I think a lot of times, when you talk to 2005 01:41:14,270 --> 01:41:19,290 students last time they got a lot more information out from 2006 01:41:19,290 --> 01:41:22,540 the masters, other than just the coding style. 2007 01:41:22,540 --> 01:41:25,050 I mean, they talk about what is it like to be an engineer 2008 01:41:25,050 --> 01:41:26,240 in a company, what are the things? 2009 01:41:26,240 --> 01:41:27,710 And so they get a good feel. 2010 01:41:27,710 --> 01:41:30,200 I mean, some of them might not have done a 2011 01:41:30,200 --> 01:41:31,560 internship in a company. 2012 01:41:31,560 --> 01:41:32,340 So they don't know. 2013 01:41:32,340 --> 01:41:36,490 I mean, they're just green, and talking to you guys they 2014 01:41:36,490 --> 01:41:38,010 get a feel for what it's like. 2015 01:41:38,010 --> 01:41:40,940 And also from a non-marketing situation too. 2016 01:41:40,940 --> 01:41:43,440 I mean you might have ulterior motives to market your company 2017 01:41:43,440 --> 01:41:45,940 to them, and stuff, but this is not that they're going into 2018 01:41:45,940 --> 01:41:47,080 a job interview. 2019 01:41:47,080 --> 01:41:48,630 So, for a lot of them it's rare. 2020 01:41:48,630 --> 01:41:51,090 I mean they might not have retinues of friends that they 2021 01:41:51,090 --> 01:41:53,160 can go and talk at that kind of casual level. 2022 01:41:53,160 --> 01:41:55,250 Most of the time they're on guard because they're on an 2023 01:41:55,250 --> 01:41:59,870 interview or they assume that information coming to them 2024 01:41:59,870 --> 01:42:02,830 will be sugar-coated, and here is a way that they can get-- 2025 01:42:02,830 --> 01:42:05,160 I think it's very good for them. 2026 01:42:05,160 --> 01:42:06,665 PROFESSOR: Eight minutes over time. 2027 01:42:06,665 --> 01:42:08,070 SAMAN AMARASINGHE: OK, I think we should. 2028 01:42:08,070 --> 01:42:12,650 PROFESSOR: So, any last final comments? 2029 01:42:12,650 --> 01:42:15,190 Saman and I will hang around for a few minutes, for anybody 2030 01:42:15,190 --> 01:42:17,350 wants to chat more one one. 2031 01:42:17,350 --> 01:42:24,620 And one and once again I thank you for all the time that 2032 01:42:24,620 --> 01:42:28,420 you're planning to put into the 6-172, thanks. 2033 01:42:28,420 --> 01:42:29,670 AUDIENCE: Thank you. 2034 01:42:29,670 --> 01:42:30,270